#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
using namespace std;
int water[201][201],v[201][201],go[201],pre[201];
int main(){
int i,j,k,m,n,w,u;
while(scanf("%d%d",&n,&m)!=EOF){
int sum=0;
memset(water,0,sizeof(water));
memset(v,0,sizeof(v));
for(i=1;i<=n;i++){
scanf("%d%d%d",&j,&k,&w);
v[j][k]+=w;
}
queue<int>q;
while(1){
memset(go,0,sizeof(go));
go[1]=9999999;
q.push(1);
while(!q.empty()){
u=q.front();
q.pop();
for(i=2;i<=m;i++){
if(!go[i] && water[u][i]<v[u][i]){
pre[i]=u;
q.push(i);
go[i]=min(go[u],v[u][i]-water[u][i]);
}
}
}
if(go[m]==0)break;
sum+=go[m];
//cout<<go[m]<<endl;
for(i=m;i!=1;i=pre[i]){
water[i][pre[i]]-=go[m];
water[pre[i]][i]+=go[m];
}
}
printf("%d\n",sum);
}
return 0;
}
/*
5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10
ans:50
*/
poj1273(网络流代码)
最新推荐文章于 2020-09-13 22:10:33 发布