最大流裸题,不多说。
AC代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<cstdlib>
#define rep(i,a,b) for (int i=a;i<=b;i++)
using namespace std;
int map[250][250];
bool vis[250]={false};
int pre[250]={0};
int n,m;
bool bfs(){
memset(vis,0,sizeof vis);
memset(pre,0,sizeof pre);
queue<int> q;
q.push(1);
vis[1]=true;
while (!q.empty()){
int cur=q.front();
q.pop();
if (cur==n) return true;
rep(i,1,n) if (!vis[i]&&map[cur][i]){
q.push(i);
vis[i]=true;
pre[i]=cur;
}
}
return false;
}
int Max_flow(){
int ans=0;
while (1){
if (!bfs()) return ans;
int mini=0x7f7f7f7f;
for (int i=n;i!=1;i=pre[i]) mini=min(mini,map[pre[i]][i]);
for (int i=n;i!=1;i=pre[i]){
map[pre[i]][i]-=mini;
map[i][pre[i]]+=mini;
}
ans+=mini;
}
}
int main(){
while (scanf("%d%d",&m,&n)!=EOF){
memset(map,0,sizeof map);
rep(i,1,m){
int x,y,w;
scanf("%d%d%d",&x,&y,&w);
map[x][y]+=w;
}
printf("%d\n",Max_flow());
}
return 0;
}