| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 58607 | Accepted: 22508 |
Description
Input
Output
Sample Input
5 4 1 2 40 1 4 20 2 4 20 2 3 30 3 4 10
Sample Output
50
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
#define INF 0x7fffffff
queue<int> q;
int tab[250][250];
int dis[250];
int N,M,ANS;
int BFS()
{
memset(dis,-1,sizeof(dis));
dis[1]=0;
q.push(1);
while (!q.empty())
{
int x=q.front();
q.pop();
for (int i=1;i<=N;i++)
if (dis[i]<0&&tab[x][i]>0)
{
dis[i]=dis[x]+1;
q.push(i);
}
}
if(dis[N]>0)
return 1;
else
return 0;
}
int find(int x,int low)
{
int a=0;
if (x==N)return low;
for (int i=1;i<=N;i++)
if (tab[x][i]>0&&dis[i]==dis[x]+1&&(a=find(i,min(low,tab[x][i]))))
{
tab[x][i]-=a;
tab[i][x]+=a;
return a;
}
return 0;
}
int main()
{
int f,t,flow,tans;
while(scanf("%d%d",&M,&N)!=EOF)
{
memset(tab,0,sizeof(tab));
for(int i=1;i<=M;i++)
{
scanf("%d%d%d",&f,&t,&flow);
tab[f][t]+=flow;
}
ANS=0;
while(BFS())
{
while(tans=find(1,INF))ANS+=tans;
}
printf("%d\n",ANS);
}
return 0;
}
原文:http://www.cnblogs.com/a972290869/p/4249227.html