POJ 1273 Drainage Ditches | 最大流模板
Posted MSPqwq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1273 Drainage Ditches | 最大流模板相关的知识,希望对你有一定的参考价值。
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<queue> 5 #define N 210 6 #define INF 1234567897 7 using namespace std; 8 int cnt=2,head[N],n,m,ans,lev[N]; 9 queue <int> q; 10 struct edge 11 { 12 int u,v,w; 13 }e[4*N]; 14 void add(int u,int v,int w) 15 { 16 e[cnt].w=w; 17 e[cnt].v=v; 18 e[cnt].u=head[u]; 19 head[u]=cnt++; 20 } 21 int bfs() 22 { 23 memset(lev,-1,sizeof(lev)); 24 lev[1]=0; 25 q.push(1); 26 while (!q.empty()) 27 { 28 int x=q.front(); 29 for (int i=head[x];i;i=e[i].u) 30 { 31 int v=e[i].v; 32 if (lev[v]==-1 && e[i].w>0) 33 lev[v]=lev[x]+1,q.push(v); 34 } 35 q.pop(); 36 } 37 return lev[m]!=-1; 38 } 39 int dfs(int x,int flw) 40 { 41 if (x==m) return flw; 42 for (int i=head[x];i;i=e[i].u) 43 { 44 int v=e[i].v,tmp; 45 if (lev[v]==lev[x]+1 && e[i].w>0 && (tmp=dfs(v,min(flw,e[i].w)))>0) 46 { 47 e[i].w-=tmp; 48 e[i^1].w+=tmp; 49 return tmp; 50 } 51 } 52 return 0; 53 } 54 void init() 55 { 56 memset(head,0,sizeof(head)); 57 cnt=2; 58 ans=0; 59 } 60 int main() 61 { 62 int u,v,w,tmp; 63 while(scanf("%d%d",&n,&m)!=EOF) 64 { 65 init(); 66 for (int i=1;i<=n;i++) 67 { 68 scanf("%d%d%d",&u,&v,&w); 69 add(u,v,w); 70 add(v,u,0); 71 } 72 while (bfs()) 73 while (tmp=dfs(1,INF)) ans+=tmp; 74 printf("%d\n",ans); 75 } 76 return 0; 77 }
以上是关于POJ 1273 Drainage Ditches | 最大流模板的主要内容,如果未能解决你的问题,请参考以下文章