USACO 草地排水 网络流

来源:互联网 发布:软件工作计划 编辑:程序博客网 时间:2024/04/20 16:01
#include<stdio.h>#include<stdlib.h>int c[201][201],f[201][201];int d[1000][2],p[201];int main(){freopen("ditch.in", "r", stdin);freopen("ditch.out", "w", stdout);int i,j,k,m,n;int x,y,z,flag=1;int s,t,min;scanf("%d%d",&m,&n);for(i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z);c[x][y]+=z;}while(flag){flag=0;for(i=1;i<=n;i++)p[i]=1;s=0;t=1;d[1][0]=1;d[1][1]=0;p[1]=0;while(s<t){s++;x=d[s][0];for(i=1;i<=n;i++)if(p[i] && (c[x][i]>f[x][i] || f[i][x]>0)){p[i]=0;d[++t][0]=i;d[t][1]=s;if(i==n){flag=1;break;}}    if(flag==1)break;}if(!flag)break;min=1000000000;i=t;while(d[i][1]){y=d[i][0];x=d[d[i][1]][0];if(c[x][y]>f[x][y] && c[x][y]-f[x][y]<min)min=c[x][y]-f[x][y];else if(f[y][x]>0 && f[y][x]<min)min=f[y][x];i=d[i][1];}i=t;while(d[i][1]){y=d[i][0];x=d[d[i][1]][0];if(c[x][y]>f[x][y])f[x][y]+=min;elsef[y][x]-=min;i=d[i][1];}}int ans=0;for(i=2;i<=n;i++)ans+=f[1][i];printf("%d\n",ans);return 0;}

0 0