题目链接 http://poj.org/problem?id=1273
简单的最大流问题
(经典模版)
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N=201;
const int INF=0x7FFFFFFF;
int n,m,map[N][N];
int path[N],flow[N];
int start,end;
int BFS(){
queue<int> myqueue;
while(!myqueue.empty())
myqueue.pop();
memset(path,-1,sizeof(path));
path[start]=0;flow[start]=INF;
myqueue.push(start);
int i,tmp;
while(!myqueue.empty()) {
tmp=myqueue.front();
myqueue.pop();
if(tmp==end)
break;
for(i=1;i<=m;i++)
if(i!=start && path[i]==-1 && map[tmp][i]){
flow[i]=flow[tmp]<map[tmp][i]?flow[tmp]:map[tmp][i];
myqueue.push(i);
path[i]=tmp;
}
}
if(path[end]==-1)
return -1;
else
return flow[end];
}
int Edmonds_Karp(){
int max_flow=0,pre,now,step;
while((step=BFS())!=-1){
max_flow+=step;
now=end;
while(now!=start){
pre=path[now];
map[pre][now]-=step;
map[now][pre]+=step;
now=pre;
}
}
return max_flow;
}
int main(){
int u,v,cost;
while(scanf("%d%d",&n,&m)!=EOF){
memset(map,0,sizeof(map));
int i;
for(i=0;i<n;i++){
scanf("%d%d%d",&u,&v,&cost);
map[u][v]+=cost;
}
start=1,end=m;
printf("%d\n",Edmonds_Karp());
}
return 0;
}