
图论
文章平均质量分 64
LeeBooL
这个作者很懒,什么都没留下…
展开
-
URAL - 1949 The Best Picture in the Galaxy
传送门:http://acm.timus.ru/problem.aspx?space=1&num=1949 题意 : k 个学生去看n个电影,每个电影有自己的开始时间,结束时间和女演员数目,并且,要保证一个学生同时不能看两场电影,其次,学生看的第i+1个电影的女演员数目要不小于他看的第i的电影的女演员数。 求看最多的电影数目时,看了那几部,没看哪几部,1 表示看过0表示没看过思路:二分图,但是要原创 2015-08-15 13:59:20 · 605 阅读 · 0 评论 -
Control
拆点,求最小割最小割定理, 求最大流#include #include #include #include #include using namespace std;#define inf 1000000000#define MAXN 10000struct Edge{ int v, f, next;};int n, f, d, src, sink原创 2015-04-03 00:25:28 · 316 阅读 · 0 评论 -
Power Network
网络流#include #include #include #include #include using namespace std;#define inf 1000000000#define MAXN 555struct Edge{ int v, f, next;};int n, f, d, src, sink;int g[50010];int原创 2015-04-03 00:19:17 · 325 阅读 · 0 评论 -
Minimum Cost
费用流问题, #include #include #include #include #include using namespace std;#define MAXN 555#define INF 0x1f1f1f#define MAXE 50000struct Edge{ Edge(){}; Edge(int a, int b, int c,原创 2015-04-03 00:00:39 · 232 阅读 · 0 评论 -
Food
#include #include #include #include #include using namespace std;#define inf 1000000000#define MAXN 11555struct Edge{ int v, f, next;};int n, f, d, src, sink;int g[200010];int nume;原创 2015-04-03 00:23:13 · 589 阅读 · 0 评论 -
Optimal Milking
有一些牛,和一些牛奶站,没个牛奶站每天最多收M只牛奶的牛, 怎样安排可以是所有牛到牛奶站的最长路径最短 思路: 路径最短-》最短路 求最大值最小 -》 二分 牛 -》 牛奶站 多值匹配 but这个题二分取值上限要取好, 开始1000 WA了无数次, 然后去了POJ 的 MESSAGE 改成200000就过了原创 2015-03-31 07:54:54 · 349 阅读 · 0 评论 -
Knights of the Round Table
点双联通分量+二分图染色1、首先根据题目给出的憎恨关系建图,然后求补图,这个图表示哪个骑士可以和哪个骑士坐在一起。2、在图中求出圈,也就是双联通分量,这可以用到Tarjan算法的思想,通过Tarjan算法执行过程中退栈求出一个又一个双联通分量。3、对于双联通分量我们需要在其中找到一个奇圈,这需要一个利用了DFS的交叉染色法,在代码中我建补图的时候没有建立自己和自己的边,当用这个方法找出来的奇圈原创 2015-03-21 23:52:38 · 344 阅读 · 0 评论 -
Fire Net
#include #include #include using namespace std;char str[5][5];int n, ans;bool check( int x, int y){ for( int i = x - 1; i >= 0; i--) { if(str[i][y] == 'O') return false;原创 2015-03-21 23:50:03 · 280 阅读 · 0 评论 -
Courses
裸地二分匹配#include #include #include #include #include using namespace std;#define MAXN 300int match[MAXN];bool vis[MAXN], gra[MAXN][MAXN];int p, n;bool dfs( int x){ for( int i原创 2015-03-21 23:49:15 · 315 阅读 · 0 评论 -
HDU 4612 Warm up
Description N planets are connected by M bidirectional channels that allow instant transportation. It’s always possible to travel between any two planets through these channels. If we can isolat原创 2015-03-21 00:48:08 · 335 阅读 · 0 评论 -
*POJ 3177 Redundant Paths**
POJ 3177 Redundant Paths 这道题是求一个变双联通分量,问你,最少加多少条边,可以使任意两个节点之间可以有两条路径 首先我们要知道,通过联通分量缩点以后我们可以形成一棵树,那么树的叶子节点数为cnt, (cnt+1)/2 便是答案, 然后就是Trajan求割边了,#include <iostream>#include <stdlib.h>#incl原创 2015-03-18 23:58:04 · 357 阅读 · 0 评论 -
Antenna Placement
就是二分图匹配, 要求把每一个*都能盖上的最小DAir antennas的数目, 那么我们首先先把能共用的数目求出来,就是求最大匹配, 然后用总数减去可以跟别人共用的数目就是我们必须使用的最小数目#include #include #include #include using namespace std;#define MAXN 1000char gr原创 2015-03-25 00:38:28 · 363 阅读 · 0 评论 -
棋盘游戏
就是判断下那个节点会影响匹配,那么我们就依次枚举好了,我们先求出最大匹配,然后以检测点是不是关键点#include#includeint map[105][105],pre[105],vis[105];int n,m;int hungry(int u){ int v; for(v=1;vm;v++) { i原创 2015-03-24 23:57:15 · 333 阅读 · 0 评论 -
UVALive - 6322 The Swapping Game
题意:给一个串以及串中每个字符可以交换的字符是谁,然后一次只可以交换两个字符, 可以交换零次或者多次。求合理的字典序最小的字符串 input:T -〉有多少组数据,初始串str, 接下来n(n = |str|)行,第i行表示第str中第i个字符可以替换成哪几个字符, output: 如果没有一种合理的解决方法 : NO SOLUTION ,否则输出最小串思路:二分图匹配, 每一个字符都会给你一个原创 2015-08-15 13:48:07 · 372 阅读 · 0 评论 -
UVALive - 5843 Furniture Factory
对每个时间点添加到终点流为工人数量,从起点对每个工作添加流为所需时间,对工作的时间点添加流为1. 网络流#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>#include<string>#include<map>#include<转载 2015-08-15 14:01:26 · 520 阅读 · 0 评论 -
zoj Islands
可以用JAVA BigInteger 但是要注意 BigInteger 的类方法中取余有两个方法一个是 mod, 一个是remainder 对于方法mod当余数是负数时会抛出异常, 而remainder 就会正常得出余数import java.math.*;import java.util.*;import java.io.*;public class Main{ public sta原创 2015-04-14 00:06:34 · 306 阅读 · 0 评论 -
Courses
模板题#include #include #include #include #include using namespace std;#define MAXN 300int match[MAXN];bool vis[MAXN], gra[MAXN][MAXN];int p, n;bool dfs( int x){ for( int i = 1; i n;原创 2015-03-24 23:55:47 · 291 阅读 · 0 评论 -
Fire Net
#include #include #include using namespace std;char str[5][5];int n, ans;bool check( int x, int y){ for( int i = x - 1; i >= 0; i--) { if(str[i][y] == 'O') return false;原创 2015-03-24 23:53:02 · 370 阅读 · 0 评论 -
Oil Skimming
很简单一个二分图题,可是我RE+MLE + WA了将近40次百思不得其解的问题当我直接在char 数组上存放序号就是RE, 而当我用另一个数组存放序号就是AC WHY????????RE代码#include #include #include using namespace std;#define MAXN 666char gra[MAXN][MAXN原创 2015-03-24 23:51:51 · 327 阅读 · 0 评论 -
Rain on your Parade
这道题其实就是一个Hopcroft-Carp模板题 在匈牙利算法中,我们每次寻找一条增广路来增加匹配集合M.可以证明,每次找增广路的复杂度是O(E),一共需要增广O(V)次,因此总时间复杂度为O(VE).为了降低时间复杂度,在Hopcroft Karp算法中,我们在增加匹配集合M时,每次寻找多条增广路.可以证明,这样迭代次数最多为2*V^0.5,所以,时间复杂度就降到了O(V^0.5*E).原创 2015-03-25 00:04:49 · 351 阅读 · 0 评论 -
Swap
首先我们要想明白一点,主对角先一定是 i == j 的点是marix[i][j]1, 也就是第I行必须要跟第I列匹配, 那么这道题就变成了一个二分图匹配问题 如果 i行可以跟I列匹配, 那么一定有解, 也就是最大匹配数一定等于矩阵行数 #include #include #include #include #include using namespa原创 2015-03-25 00:02:33 · 283 阅读 · 0 评论 -
The Accomodation of Students
典型的二分图最大匹配题 我们要先判断这个图是不是二分图,可以用染色法来实现#include #include #include #include using namespace std;#define MAXN 222bool gra[MAXN][MAXN], vis[MAXN];int match[MAXN], col[MAXN];int ans, n原创 2015-03-24 23:54:05 · 378 阅读 · 0 评论 -
HDU 4635 Strongly connected
G - Strongly connected Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u SubmitStatusPracticeHDU 4635 Description Give a simple directed graph with N nodes and M edges. P原创 2015-03-21 00:26:01 · 333 阅读 · 0 评论 -
POJ 3694 Network
D - Network Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u SubmitStatusPracticePOJ 3694 Description A network administrator manages a large network. The network consis原创 2015-03-21 00:36:17 · 329 阅读 · 0 评论 -
Going Home
最小费用流,我们先求出m到每个H的最短距离, 然后建立一个超级源点SRC和一个超级汇点SINK, 源点到每一个M的流量值为1, H到每个汇点的流量值也是1,然后 m和H之间的流量也是1,这样就保证,他的单价就是 距离的费用, 也确保了一个人只能找一个家 不断用SPFA找增广路,SPFA的距离指标就是费用#include #include #include #in原创 2015-03-27 23:13:57 · 352 阅读 · 0 评论 -
1062
研究了好久。。。最后看了 #include #include #include using namespace std;int thing[100000 + 10];int map[105][105];bool vis[105];bool ok[105];int N,M,K,P,L,T,V,X;int dis[105];原创 2014-07-29 21:22:55 · 314 阅读 · 0 评论 -
POJ3020
#include #include #include using namespace std;bool vis[500];int link[500];bool gra[500][500];int map[500][500];int Pnum;int v1,v2;int row,clo;int t,ans;int search[原创 2014-07-23 21:45:56 · 322 阅读 · 0 评论 -
POJ1201(查分约束)
通过这道题又进一步理解了SPFA原创 2014-07-18 07:54:00 · 365 阅读 · 0 评论 -
ZOJ2770
#include #include #include using namespace std;#define Edge_count 30000#define Pnt_count 2000#define INF 0x1f1f1f1fstruct edge{ int adj; int point; int w;原创 2014-07-17 07:11:15 · 589 阅读 · 0 评论 -
POJ3259
#include #include #include using namespace std;struct Edge{ int a; int b; int t;}e[2500*2 + 1000];int res[2500 + 10];bool ballman(Edge *ed, int * res,in原创 2014-07-16 21:06:45 · 306 阅读 · 0 评论 -
POJ2485
#include #include #include using namespace std;int low[10000];int vis[10000];int map[600][600];int prim(int n){int i,j;int t;for(i=1;i{low[i]=map[1][i];原创 2014-07-16 21:11:18 · 345 阅读 · 0 评论 -
POJ1680
#include #include #include #define INF -1using namespace std;struct Edge{ int a,b; double r,c;}e[300];double res[150];bool ballman(Edge *e, double *res, int原创 2014-07-16 21:08:01 · 417 阅读 · 0 评论 -
zoj1364
#include#include#define N 110int n,m,k,map[N][N],vis[N],match[N];void getmap(){ int i,a,b,c; memset(map,0,sizeof(map)); for(i=0;i { scanf("%d%d%d",&a,&b,&c);原创 2014-06-04 22:47:40 · 498 阅读 · 0 评论 -
HDU3594、、、、、、、**************
#include #include #include #include #define MAXN 20005#define INF 1e8#define min(a,b) (ausing namespace std;struct edge{ int u,v,next;}E[50006];int head[MAXN],ecnt;原创 2014-05-14 18:26:15 · 418 阅读 · 0 评论 -
POJ 3084
第一道最大流的题, 网络流的题都是图不好建立, 一般原创 2014-11-05 18:32:15 · 306 阅读 · 0 评论 -
poj 1201
查分约束**要注意查分约束的隐含条件, 然后加一个源点,终点,用bellman_ford 或者 sfpa Poj 1201 大致题意:给出n个闭区间[ai,bi],每个区间对应一个ci,表示集合Z在区间[ai,bi]内ci 个相同元素,问集合Z至少有几个元素。分约束的思想:可以肯定的是s[bi]-s[ai-1]>=ci; 为什么要ai-1,是因为ai也原创 2015-01-27 22:35:56 · 310 阅读 · 0 评论 -
Drainage Ditches (Dinic)
#include #include #include #include using namespace std;#define INF 0x1f1f1f1f#define MIN(a,b) ((a)#define MAX(a,b) ((a)>(b)?(a):(b))#define N 500int cap[N][N];//容量int flow原创 2015-02-01 20:15:30 · 358 阅读 · 0 评论 -
Dining
裸Dinic模板#include #include #include #include #include using namespace std;#define inf 1000000000#define MAXN 555struct Edge{ int v, f, next;};int n, f, d, src, sink;原创 2015-03-27 23:10:14 · 363 阅读 · 0 评论 -
Jamie's Contact Groups
二分 + 多值匹配 思路:一对多的二分图的多重匹配。二分图的多重匹配算法的实现类似于匈牙利算法,对于集合C中的元素xi,找到一个与其相连的元素yi后,检查匈牙利算法的两个条件是否成立,若yi未被匹配,则将xi,yi匹配。否则,如果与yi匹配的元素已经达到上限,那么在所有与yi匹配的元素中选择一个元素,检查是否能找到一条增广路径,如果能,则让出位置,让xi与yi匹配。二分求出limit,知道原创 2015-03-27 23:16:53 · 892 阅读 · 0 评论 -
poj 2186
Popular CowsTime Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64uSubmit StatusDescriptionEvery cow's dream is to become the most popular cow原创 2015-03-16 22:52:24 · 309 阅读 · 0 评论