网络流
文章平均质量分 78
bubbleoooooo
这个作者很懒,什么都没留下…
展开
-
网络流_hdu3338Kakuro Extension (神奇最大流 Dinic)
题意: 给一个表格的横纵和,用1~9去填,数字可重复,求一种解决方案。 建图思路: 从空白格任取一个数,假定这个数所在为i行j列。则这个数的数值既被包括在行之和中,也被包括在列之中。那么我们可以采用行进列出的思想。从原点连向行之和节点,从列之和节点连向汇点。 中间就通过任意的空白格节点将行之和与列之和连接起来。题目要求是原创 2015-02-04 15:23:39 · 627 阅读 · 0 评论 -
hdu 4307 Matrix( 公式化最小割)
公式1:公式2: // 膜拜网上的大牛们。。。orz//首先,最小割解决的问题可以转换成的公式(1)(最小割即为求f的最小值)//xi可以取0,1且只能选其中的一个,所以可以考虑用最小割。//其次只考虑一个元素xi时,xi=0,可以获得ai的收益,xi=1时,可以获得bi的收益,//考虑两个元素xi,xj,xi=1,xj=1时,可以获得ci的收益。原创 2015-07-19 12:55:25 · 448 阅读 · 0 评论 -
网络流最大流sap算法模板
#include#includeusing namespace std;const int M=500000,N=60000;const int INF = 0x3fffffff;struct Edge{ int from,to,cap,next;};int n,m;//总的点数,包括源点和汇点Edge edge[M];int q[N];int head[N],dep[原创 2015-07-18 13:51:29 · 437 阅读 · 0 评论 -
hdu3280 Golden Eggs(网络流最小割)
这题难点在于建图。参考了网上大牛的建图,膜拜下orz首先这类题,分成两个集合A,B集合内部的点都是不相交的。然后对于每一个点,有三种选择,金,银,无。每一个格拆为两个点,金和银,之间为正无穷,因为金银只能选一种。对于A集合 为源-金-银-汇对于B集合 为源-银-金-汇。A、B集合之间为相邻的点连权值对应的边。最小割割去的都是不要的,所以答案为Sum-最小割。这个原创 2015-07-18 13:54:36 · 345 阅读 · 0 评论 -
hdu 3667 Transportation(最小费用最大流 拆边)
需要注意的就是费用为a*x^2,这里的1所以一条边可以拆成x条流量为1的边。增加一条边花费为(2*x-1).附上代码喵:#include#include#include#includeusing namespace std;const int maxn=105;const int maxm=100010;#define INF 1000000000#defi原创 2015-03-25 11:03:06 · 401 阅读 · 0 评论 -
hdu 3998 Sequence(最大流+dp)
题意:给定一个序列,求此序列的最大上升子序列的长度,以及在此长度下不相交的序列条数。首先直接dp出最长上升子序列的长度。对于不相交的序列而言,可以考虑用拆点的最大流。通过dp数组来建图。首先拆点,一个点拆成左边和右边,中间流量为1,保证这个点只用1次。考虑序列的开始一定是dp[i]==1的,所以对于这类点,我们从源点到点左边连一条流量为1的边。然后考虑序列结束,原创 2015-03-24 20:28:56 · 388 阅读 · 0 评论 -
网络流题目总结
网络流总结 最大流hdu 1532 DrainageDitches模板题poj 2112 OptimalMilking给定一张图,有K个机器,C头奶牛。求使距离机器最远的奶牛最小距离。先二分距离,然后去掉大于距离的边建图,判断是否满流。sgu-perspective告诉你同分区每支球队的当前得分和剩余比赛场数,以及各支球队之间剩余的比赛场数,然你判断本队(编号为1)原创 2015-03-10 22:05:34 · 464 阅读 · 0 评论 -
最小费用最大流模板
#include#includeusing namespace std;#include#define MIN(a,b) a<b?a:b#define INF 1000000000#define oo 1000000int N,M,K,cnt;int src,des;#define maxn 1000000#define maxm 222struct node{原创 2015-03-02 10:15:30 · 330 阅读 · 0 评论 -
网络流最大流之Dinic算法模板
bool bfs(int x){ memset(mark,-1,sizeof(mark)); mark[x]=1; int que[maxn]; int front=0,rear=0; que[rear++]=x; while(front!=rear) { int k=que[front++];front%=maxn; for(int i=head[k];i!=-1;i=e原创 2014-08-08 09:42:54 · 606 阅读 · 0 评论 -
网络流_hdu3605 Escape 最大流 + 状压缩图
题意: 给n个人,m个星球。每个人可以去特定的几个星球,每个星球有特定的容量。问是否m个星球可以装下n个人?起初直接构图,10万个点,边数也在10^6的数量级。直接就TLE了。想想星球只有10个,每个人对应可去星球的状态只有2^10 。那么10万个人中肯定大部分人的状态都是重复的。那么我们可以把这些状态相同的人合并成一个点。那么整张图的点最多只有2+2^10+10个。不同原创 2015-02-04 20:47:06 · 412 阅读 · 0 评论 -
hdu 5294 Tricks Device(15多校第一场1007)(spfa+最小割)
//最小割+spfa#include#include#includeusing namespace std;typedef long long LL;#define MIN(a,b) a<b?a:b#define MAX(a,b) a>b?a:bconst int N=50000,M=500000,INF=0x3fffffff;int n,m;struct EDGE{原创 2015-07-22 19:37:03 · 353 阅读 · 0 评论