最大流模板套用! #include<stdio.h> #include<string.h> #define max 205 int g[max][max]; int f[max][max]; int n,e; int used[max]; int pre[max]; int dp[max]; int queue[max]; int bfs() { int i,j,k,st; int front=0,rear=0; memset(used,0,sizeof(used)); for(i=1;i<=n;i++) { dp[i]=10000001; pre[i]=0; } queue[rear]=1; rear++; used[1]=1; while(front!=rear) { st=queue[front]; front++; for(i=2;i<=n;i++) if(used[i]==0&&g[st][i]&&dp[i]>(g[st][i]<dp[st]?g[st][i]:dp[st])) { used[i]=1; dp[i]=dp[st]<g[st][i]?dp[st]:g[st][i]; pre[i]=st; queue[rear]=i; rear++; if(i==n) return 1; } } return 0; } main() { int i,j,k; int a,c,b; while(scanf("%d%d",&e,&n)!=EOF) { memset(g,0,sizeof(g)); memset(f,0,sizeof(f)); for(i=1;i<=e;i++) { scanf("%d%d%d",&a,&b,&c); g[a][b]+=c; } while(bfs()!=0) { int s=n; while(pre[s]) { f[pre[s]][s]+=dp[n]; // f[s][pre[s]]=-f[pre[s]][s]; g[pre[s]][s]-=dp[n]; g[s][pre[s]]+=dp[n]; s=pre[s]; } } int re=0; for(i=2;i<=n;i++) re+=f[1][i]; printf("%d/n",re); /* for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%d ",g[i][j]); printf("/n"); }*/ } }