http://acm.hdu.edu.cn/showproblem.php?pid=1532
#include <iostream> #include <stdio.h> #include <string.h> #include <queue> #define INF 100000 #define Min(x,y) x<y?x:y using namespace std; int map[205][205]; int flow[205][205]; int tem[205]; int p[205]; int n,m; int max_flow(int s,int t) //原点, 汇点。 { queue <int> q; int ans,u,v; ans=0; memset(flow,0,sizeof(flow)); while(1) { memset(tem,0,sizeof(tem)); memset(p,0,sizeof(p)); tem[s]=INF; q.push(s); while(!q.empty()) { u=q.front(); q.pop(); for (v=1;v<=n;v++) { if (!tem[v] && map[u][v] > flow[u][v]) { p[v]=u; q.push(v); tem[v]=Min(tem[u],map[u][v]-flow[u][v]); } } } if (tem[t]==0) break; for (u=t;u!=s;u=p[u]) { flow[p[u]][u]+=tem[t]; flow[u][p[u]]-=tem[t]; } ans+=tem[t]; } return ans; } int main() { int i,x,y,c; while(cin>>m>>n&&(m||n)) { memset(map,0,sizeof(map)); for (i=0;i<m;i++) { cin>>x>>y>>c; map[x][y] += c; } cout<<max_flow(1,n)<<endl; } return 0; }