网络流
文章平均质量分 67
omsobliga
这个作者很懒,什么都没留下…
展开
-
HDU 2063 过山车(二分图最大匹配问题)
/*基础的二分图最大匹配问题*/#include using namespace std;const int nMax = 505;int map[nMax][nMax];//存储男女匹配模式int link[nMax];//与第i个女生相匹配的男生int useif[nMax];//是否被访问int K, M, N;bool can(int t){ for(int原创 2012-07-16 20:36:06 · 687 阅读 · 0 评论 -
HDU 4292 Food(拆点,最大流)
/*最大流问题拆点:增加超级源点和汇点,源点于食物相连,边的权值为食物最大量;饮料与汇点相连,变得权值为饮料的最大量;将人拆分成两个,一个与食物相连,一个与饮料相连,权值可以为1也可以为INF,无影响。将拆分后的两个节点相连,边的权值为1*/#include #include const int nMax = 2007;const int INF = 0x3fffffff;i原创 2012-09-20 12:38:43 · 1209 阅读 · 0 评论 -
HDU 4289 Control(拆点,最大流)
/*拆点:将每一个节点拆为a,a1,边的权值给节点的最小消耗,如果节点a、b之间原来有边相连,则a1,b和b1,a之间连接两条边,权值为INF。于是转换为最大流问题新收获:我原来打算用vector存储邻接表,最后发现反向遍无法处理。终于明白了②、③处的用法,目的方便对反向遍进行运算。异或使两边对应起来*///dinic实现#include #include #include原创 2012-09-19 21:04:03 · 908 阅读 · 0 评论 -
HDU 1733 escape(最大流 + dinic算法)
/*超时,不过不想找错误了!做这道题开始接触dinic算法如果想要学dinic算法,参见:http://wenku.baidu.com/view/98deaf06b52acfc789ebc91a.html###http://www.cnblogs.com/ltang/archive/2010/11/17/1879573.html题意:X代表人,@代表教室门,问所有的人都跑出教室需要多原创 2012-07-21 21:20:26 · 785 阅读 · 0 评论 -
HDU 3572 Task Schedule(最大流问题,sap算法)
/*题意:用m个机器,处理n个任务,每个任务必须在[si,ei]时间段完成,需要pi天才能完成。每个机器只能处理一个任务,即每天只能处理m个任务。题解:可以采用贪心法处理,区间覆盖问题,可以参见刘汝佳的书。或者采用最大流,建图:把每个任务和每一天看做一个点,增加源点s和汇点t,在s和每个任务之间连一条边,容量为持续天数;在每一天和t之间连一条边,容量为m;在每个任务和对应天数之间连一条边原创 2012-07-27 21:29:58 · 1403 阅读 · 0 评论 -
HDOJ 1532 Drainage Ditches(最大流)
/*AC,一道基本最大流问题,采用Edmonds_Karp算法,算法复杂度O(V*E*E)*/#include #include using namespace std;const int nMax = 207;const int INF = 0x7fffffff;queue Q;int start, endd, path[nMax], flow[nMax], map[nMa原创 2012-07-15 17:03:30 · 734 阅读 · 0 评论 -
HDU 3081 Marriage Match II(匈牙利算法 + 并查集)
/*WA,但是不知道原因题意:2*n个同学,n个男生,n个女生,m组数据表示两同学之间没有争吵,女同学中f组朋友。女同学寻找男朋友,如果他们之间或者她的朋友与那个男生之间无争吵,则可以作男朋友。当所有女生都找到男朋友后,则完成一轮。问最终有多少轮。题解:匈牙利算法 + 并查集问题显然是二分图最大匹配问题,如果最大匹配为n,则完成一轮。每完成一轮,需要进行一些处理,相同女同学不能选择同样的男原创 2012-07-26 16:42:42 · 656 阅读 · 0 评论 -
hdu1281 棋盘游戏(枚举 + 二分图最大匹配)
/*题解:枚举 + 二分图最大匹配棋盘行和列分别作AB集合,如果可以放旗子,则Ai 与 Bi连一条边,令map[i][j] = 1。同行与同列至多存在一个棋子,等于同一个点只能被一条边覆盖,于是棋盘中可以放最多棋子问题便转换成寻找最大匹配问题。由于本题中要求找出存在多少关键点,枚举每一个map[i][j] = 1的点,如果将map[i][j] = 0后,得到最大匹配值小于原来最大匹配值,则该节原创 2012-07-25 22:40:26 · 730 阅读 · 0 评论 -
HDU 1569 方格取数(2)(最大点权独立集)
/*题解:因为这个数据比较大,所以用动态规划会超时。将图转换成黑白棋盘问题,i + j 为奇数的与s节点相连,边的权值为棋盘上对应位置的值,其他的与t节点相连,边的权值为棋盘上对应位置的值,然后让棋盘上相邻之间的节点用边相连,边的权值为INF。这样问题就转换为了最大点权独立集问题。定理:1、最大点权独立集 = sum - 最小点权覆盖集。2、最小点权覆盖集 = 最小割 = 最大流实现原创 2012-07-20 09:36:09 · 1187 阅读 · 0 评论 -
HDU 1498 50 years, 50 colors(多次进行最小点覆盖运算)
/*题意:n*n的矩形中放入颜色值为[1,50]的气球,要求每一个人扎k次,每扎一次,可以将同行或者同列相同颜色的气球全部扎破。求是否存在不可能全部扎破的气球,按照升序规律输出气球的颜色。题解:多次进行最小点覆盖运算即可矩形行列分别为集合A和集合B,如果判断k气球,则如果map[i][j] = k,则表示存在一条边,这样便可以转换成最小点覆盖问题,只需要找出最小的点,清除掉两集合之间所有的原创 2012-07-18 23:32:35 · 716 阅读 · 0 评论 -
HDU 2819 Swap(最大匹配问题)
/*题意:输入N*N矩形的数据,通过行交换或者列交换来使正对角线的数值都为1.题解:按照正常逻辑也可以进行判断。转换成二分图匹配问题更简单一些左边卫矩形的行数,右边为矩形中‘1’所在的列。*/#include #define re(i, n) for(int i = 0; i < n; ++ i)using namespace std;const int nMax = 105;原创 2012-07-18 22:14:50 · 925 阅读 · 0 评论 -
HDU 1507 Uncle Tom's Inherited Land(黑白棋盘最大匹配)
/*题意:N*M的矩形,向其中填充1*2的小块矩形,黑色的部分不能填充,问最多可以填充多少块。题解:黑白棋最大匹配将棋盘中i+j为奇数的做A集合,偶数的做B集合,相邻的则建立联系。于是便转换成寻找最大匹配的问题*/#include #define re(i, n) for(int i = 0; i < n; ++ i)using namespace std;const int原创 2012-07-19 11:03:00 · 1151 阅读 · 0 评论 -
hdu 3605 Escape(二分图多重匹配问题)
/*题意:末日逃亡,n个人逃往m个星球,一个人只能在某些星球上生存。一个星球最多居住人口有上限。求最后是否可以让所有人都逃离地球。题解:基础的二分图多重匹配问题(类似于二分图最大匹配)技巧:①处,可以减少代码量*/#include #define re(i, n) for(int i = 0; i < n; ++ i)//①using namespace std;con原创 2012-07-18 16:53:28 · 691 阅读 · 0 评论 -
HDU 2768 Cat vs Dog(最大独立集)
/*题意:喜欢或者讨厌同一只猫和狗的人不能同时留下题解:将观众分成两组,左边是喜欢猫的,右边是喜欢狗的,如果存在冲突,则在这两个观众之间加一条边,于是问题转换成求最大独立集问题。*/#include using namespace std;const int nMax = 505;struct Node{ char str1[10]; char str2[10];}cat[原创 2012-07-18 09:57:11 · 625 阅读 · 0 评论 -
HDU 1150 Machine Schedule(最小点覆盖问题)
/*题意:A机器n种工作模式,B机器m种工作模式,共有k个任务。(i,x,y)代表:任务i可由A机器x模式或者B机器y模式完成。任务顺序可以随便改动,如果A或者B机器需要更换模式,则需要重启机器。求完成工作,需要最少启动机器次数。解题思路:画出二分图,易知该问题为最小点覆盖问题,最小顶点覆盖 = 最大匹配数证明参见Konig定理:http://www.cppblog.com/abi原创 2012-07-16 22:03:13 · 986 阅读 · 0 评论 -
HDU 1151 Air Raid(最小路径覆盖)
/*题意:输入n,m,分别表示路口数和街道数。街道单向通行,伞兵落在某路口上,可以通过街道到达下一个路口,求至少降落几个伞兵就可访问完所有的路口。解答:最小路径覆盖问题:在一个有向图中,使用最少的路径访问完所有的节点。最小路径覆盖 = 顶点数 - 最大匹配数有向图G(V,E),将V中每个顶点vi分成vi'与vi'',如果存在一条vi到vj的边,那么就在二分图中连接一条vi'与vj''的边原创 2012-07-17 09:41:55 · 573 阅读 · 0 评论 -
HDU 1068 Girls and Boys(最大独立集)
/*题意:n个同学,一些男女同学会有缘分成为情侣,格式ni:(m) n1 n2 n3表示同学ni有缘与n1,n2,n3成为情侣,求集合中不存在有缘成为情侣的同学的最大同学数。题解:独立集:图的顶点集的子集,其中任意两点不相邻最大独立集 = 顶点数 - 最大匹配数由于本题是从整个点集搜索,并不是将点集分开成(A)(B),(1->2)(2->1)对称存在,所以相当于搜索了两遍。因此真正最大匹原创 2012-07-17 16:24:37 · 1004 阅读 · 0 评论 -
网络流总结(二)
这些天学习网络流,总结了一下用到的主要算法,主要从下面几个方面来介绍一、常见的几种算法二、这些算法的复杂度三、这些算法适合处理的问题四、算法模板FF方法(Ford_Fulkerson):所有增广路径问题都是以Ford_Fulkerson方法为基础,之所以称为方法而不是算法,因为它提供的是一种思想。Ford_Fulkerson(s,t) f = 0,对自定义流f原创 2012-07-28 22:52:46 · 797 阅读 · 0 评论