Seniors ' Code
#include <stdio.h> #include <string.h> #include <queue> #include <algorithm>using namespaceStd;ConstintMaxn =1005;ConstintOo =1e9+7;structEdge{intV,Flow,Next;}Edge[Maxn];intHead[Maxn],Cnt;intLayer[Maxn];voidInit(){Cnt =0;Memset(Head, -1,sizeof(Head));}voidAddedge(intU,intV,intFlow){Edge[Cnt].V =V;Edge[Cnt].Flow =Flow;Edge[Cnt].Next =Head[U];Head[U] =Cnt++;Swap(U,V);Edge[Cnt].V =V;Edge[Cnt].Flow =0;Edge[Cnt].Next =Head[U];Head[U] =Cnt++;}BOOLBFS(intStart,intEnd){Memset(Layer,0,sizeof(Layer));Queue<int>Q;Q.Push(Start);Layer[Start] =1; while(Q.Size()) {intU =Q.Front();Q.Pop();if(U ==End)returnTrue; for(intJ=Head[U];J!=-1;J=Edge[J].Next) {intV =Edge[J].V;if(Layer[V] ==0&&Edge[J].Flow) {Layer[V] =Layer[U] +1;Q.Push(V); } } }returnFalse;}intDfs(intU,intMaxflow,intEnd){if(U ==End)returnMaxflow;intUflow =0; for(intJ=Head[U];J!=-1;J=Edge[J].Next) {intV =Edge[J].V;if(Layer[V]==Layer[U]+1&&Edge[J].Flow) {intFlow =Min(Edge[J].Flow,Maxflow-Uflow);Flow =Dfs(V,Flow,End);Edge[J].Flow -=Flow;Edge[J^1].Flow +=Flow;Uflow +=Flow;if(Uflow ==Maxflow) Break; } }if(Uflow ==0)Layer[U] =0;returnUflow;}intDinic(intStart,intEnd){intMaxflow =0; while(BFS(Start,End) ==True)Maxflow +=Dfs(Start,Oo,End);returnMaxflow;}intMain(){intN,M; while(scanf("%d%d", &M, &N) !=Eof) {intU,V,Flow;Init(); while(M--) {scanf("%d%d%d", &U, &V, &Flow);Addedge(U,V,Flow); }Printf("%d\n",Dinic(1,N)); }return0;}
HDU 1532--&&--POJ1273 dinic algorithm