随笔分类 -  网络流

摘要://题目类型:最大流最小割解题思路:把伞兵看成边,行列看成节点,转化为了带权二分图最小点覆盖。加入超级源点和超级汇点,源点和所有行节点相连,所有列节点和汇点相连,如果a行b列有敌人,则把节点a和节点b相连。则问题又可以转化求最小割。现在求源点和汇点之间的最小割。因为对任一敌人<a,b>,必然有source-->a-->b-->sink, 割的性质是"不存在一条从sou... 阅读全文
posted @ 2010-06-11 10:56 北海小龙 阅读(663) 评论(0) 推荐(0)
摘要://题目类型:最小割 实际上就是求割边,但这个割边必需是一头能被源到达,另一头能被汇到达。以下分析转载自:http://hi.baidu.com/edwardmj/blog/item/112891b73f289ac536d3ca80.html 【题目大意】给定一个流网络,让你求其中有多少条有效边。其中有效边的定义是:修改这条边的容量,可以使最大流增大。(只允许修改一条边)【算法分析】如果你平常写网... 阅读全文
posted @ 2010-06-10 21:47 北海小龙 阅读(495) 评论(0) 推荐(0)
摘要://题目类型:最大流+二分搜索 //本题的关键在于理解题意:本题不是求最短路,而是要求路上的最长的一部分最小,故可以用二分法解决,至于路的条数,则可以求图的最大流 #include <iostream>#include <queue>//#include <conio.h>using namespace std;#define parray 40001#defi... 阅读全文
posted @ 2010-06-10 19:14 北海小龙 阅读(542) 评论(0) 推荐(0)
摘要://题目类型:最大流+二分搜索//本题与09年东北四省赛Power Line题目类似//注意:最大值不要使用0x7fffffff,否则会一直wa #include <iostream>//#include <conio.h>#include <queue>using namespace std;#define narray 240#define karray 3... 阅读全文
posted @ 2010-06-10 15:52 北海小龙 阅读(526) 评论(0) 推荐(0)
摘要://题目类型:最大流+二分搜索 //本题的关键在于线的长度一样长(使用二分搜索实现) #include<iostream>#include<queue>#include<algorithm>//#include<conio.h>using namespace std;#define narray 440#define INF 1000000int f... 阅读全文
posted @ 2010-06-08 17:16 北海小龙 阅读(314) 评论(0) 推荐(0)
摘要://题目大意:求两点之间最短路的条数,但是前提是已走过的路径不能重复//题目类型:最大流+最短路径//解题思路:首先用Dijkstra求出两点之间的最短路,然后判断每条边是否在最短路上,如果在最短路上,则流量自增1 ,然后求出最大流 #include <iostream>#include <algorithm>#include <queue>#include &... 阅读全文
posted @ 2010-06-07 21:30 北海小龙 阅读(597) 评论(0) 推荐(0)
摘要:步骤0:初始可行0流步骤1:如果不存在最小费用流,则计算结束,已经找到最小费用流;否则,用最短路算法(由于存在负圈,只能采用SPFA或者Bellman-Ford算法)在残留网络中找到源点到终点的最小费用可增广路,转步骤2。步骤2:沿找到的最小费用可增广路增流,并转步骤1 。int maxData = 10000000;bool final[105]; //SPFA算法中标识结点是否在队列中 int... 阅读全文
posted @ 2010-05-30 22:08 北海小龙 阅读(673) 评论(0) 推荐(0)
摘要://类型:最小费用流问题(此题的关键在于建图)算法:最小费用路算法(见《算法分析与设计》P312页) 构图:由于有K种商品,但是每一种商品的图其实是独立的。所以,我们可以构K次二分图。每次,新增源点src和汇点des,src向提供者连弧,容量为给定值,费用为0;提供者向购买者连弧,容量应为给定值(如果容量为maxlongint则会超时),费用为给定值;购买者向des连弧,容量为给定值,费用为0。显... 阅读全文
posted @ 2010-05-30 21:54 北海小龙 阅读(532) 评论(0) 推荐(1)
摘要:const int maxn=201; const int maxm=201;struct node{ int x,y,f,op,next; //x起点,y终点,f权值,next是以x为起点的上一条边在g中的位置,op是反向边在g中的下标位置 }g[maxm*2];//first[]存储的是以x为起点的最后一条边的在数组g中的下标 //sumd[]用于记录表示标号为i的顶点数有多少个,用于间隙优化... 阅读全文
posted @ 2010-05-29 21:47 北海小龙 阅读(922) 评论(0) 推荐(0)
摘要://题目类型:纯最大流//算法实现:ISAP算法(邻接表实现) #include<iostream>#include<cstdio>//#include<conio.h>#include<string.h>using namespace std;const int maxn=201; const int maxm=201;struct node{ i... 阅读全文
posted @ 2010-05-29 21:41 北海小龙 阅读(479) 评论(0) 推荐(0)
摘要://题目类型:最大流(多源点、多汇点)构图简单题 //解题思路:分别添加超级源点和超级汇点,使用ISAP算法实现,另外本题的输入与输出也应该特别学习 #include <iostream>#include <queue>//#include <conio.h>using namespace std;#define arraysize 205int maxData... 阅读全文
posted @ 2010-05-26 22:33 北海小龙 阅读(587) 评论(0) 推荐(0)
摘要:关于此算法的介绍可参看此为牛人的博客:http://www.icycandy.com/blog/template-of-broaden-the-shortest-path-algorithm/comment-page-1另外在《算法艺术与信息学竞赛》中也有详细的解释。 阅读全文
posted @ 2010-05-26 22:13 北海小龙 阅读(488) 评论(0) 推荐(0)
摘要:#include <iostream>#include <queue>#define msize 1024 //最大顶点数目using namespace std;int d[msize]; //标号int r[msize][msize]; //残留网络,初始为原图int num[msize]; //num[i]表示标号为i的顶点数有多少int pre[msize]; //... 阅读全文
posted @ 2010-05-26 22:07 北海小龙 阅读(626) 评论(0) 推荐(0)
摘要:有关最大流的解释看《算法导论》和博客中的相关内容 模板(C++):#include <iostream>#include <queue>//#include <conio.h>using namespace std;#define arraysize 201int maxData = 0x7fffffff;int capacity[arraysize][arra... 阅读全文
posted @ 2010-05-25 21:38 北海小龙 阅读(575) 评论(0) 推荐(1)
摘要://题目类型:最大流入门题//解题思路:使用EK算法实现(利用广搜寻找增广路径,直至找到所有的增广路径) #include <iostream>#include <queue>//#include <conio.h>using namespace std;#define arraysize 201int maxData = 0x7fffffff;int capa... 阅读全文
posted @ 2010-05-23 11:15 北海小龙 阅读(776) 评论(0) 推荐(0)
摘要:图论中的最大流问题解法一般分为两类:(1)增广路径方法。这个方法是由Ford-Fulkerson俩人提出来的,所以这一类的方法统称Ford-Fulkerson算法。增广路径又叫流量增益路径,增广的意思我个人理解是“可扩张的”,是由多条边。这种方法总体思想是先找到一条从源点到汇点的增广路径,这条路径不管由多少条边组成,这条路径的容量只能是其中容量最小的边的容量。这其实就是桶的... 阅读全文
posted @ 2010-05-23 11:14 北海小龙 阅读(2984) 评论(0) 推荐(0)