HDU3549 网络流入门题(Dinic)
2015-11-16 22:05
656 查看
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <queue> #include<math.h> #define inf 0x3f3f3f3f #define ls l,mid,rt<<1 #define rs mid+1,r,rt<<1|1 #define maxn 10000000 using namespace std; struct node { int to,w,next; } q[300000]; int head[300000],l[300000],cnt,s,e; void bu(int a,int b,int c) { q[cnt].to=b; q[cnt].w=c; q[cnt].next=head[a]; head[a]=cnt++; q[cnt].to=a; q[cnt].next=head[b]; q[cnt].w=0; head[b]=cnt++; } int bfs() { queue<int >Q; while(!Q.empty()) Q.pop(); memset(l,-1,sizeof(l)); l[s]=0; Q.push(s); while(!Q.empty()) { int v=Q.front(); Q.pop(); for(int i=head[v]; ~i; i=q[i].next) { if(q[i].w>0&&l[q[i].to ]==-1) { l[q[i].to ]=l[v]+1; Q.push(q[i].to); } } } return l[e]!=-1; } int dfs(int x,int f) { if(x==e||!f) { return f; } int tmp=0,a; for(int i=head[x]; ~i; i=q[i].next) { if(q[i].w>0&&(l[q[i].to ]==l[x]+1 )) { a=dfs(q[i].to,min(q[i].w,f-tmp)); if(a>0) { q[i].w-=a; q[i^1].w+=a; tmp+=a; if(tmp==f) break; } //else // l[q[i].to ]=-1; } } if(tmp==0) l[x]=-1; return tmp; } int main() { int n,m,i,j,k,cla,A=1; scanf("%d",&cla); while(cla--) { int a,b,c; cnt=0; scanf("%d%d",&n,&m); s=1,e=n; memset(head,-1,sizeof(head)); for(i=0; i<m; i++) { scanf("%d%d%d",&a,&b,&c); bu(a,b,c); } int ans=0; while(bfs()) { ans+=dfs(1,inf); } printf("Case %d: %d\n",A++,ans); } return 0; }
相关文章推荐
- Poj2638 网络流+最短路+二分答案
- BZOJ3275 Number (最小割)
- [笔记] 网络流-最大流 POJ-1273\HDU-4240
- 上下界网络流初探
- Edmonds-Karp 最大流 hdu 1532 Drained Ditches
- 网络流_poj1273
- POJ 1273 Drainage Ditches 最大流 dinic
- POJ1273-Drainage Ditches
- 【网络流】复杂的大门
- ACM/ICPC World Finals 2013 C Surely You Congest
- 网络流算法整理
- [BZOJ1797][AHOI2009][最大流][强连通分量]Mincut最小割
- [BZOJ2324][ZJOI2011][最小费用最大流]营救皮卡丘
- [BZOJ1834][ZJOI2010][最大流][最小费用最大流]网络扩容
- Topcoder SRM642 TaroCutting
- POJ2391解题报告
- uva 11248
- [网络流24题 #2]太空飞行计划问题
- [网络流24题 #18]分配问题
- [网络流24题 #2]太空飞行计划问题