#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int m,n,mp[205][205],a,b,c,path[205],flow[205];
int bfs()
{
queue<int>qu;
qu.push(1);
memset(path,-1,sizeof(path));
path[1] = 0;
flow[1] = 2100000000;
while(!qu.empty())
{
int t = qu.front();
qu.pop();
if(t==n)break;
for(int i=1;i<=n;i++)
if(path[i]==-1&&mp[t][i])
{
flow[i] = flow[t]<mp[t][i]?flow[t]:mp[t][i];
path[i] = t;
qu.push(i);
}
}
if(path[n]==-1)return -1;
else return flow[n];
}
int edmondsKarp()
{
int maxFlow = 0,va;
while(va=bfs())
{
if(va==-1)break;
maxFlow+=va;
int now = n;
while(now!=1){
int pre = path[now];
mp[pre][now]-=va;
mp[now][pre]+=va;
now = pre;
}
}
return maxFlow;
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
memset(mp,0,sizeof(mp));
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
mp[a][b] += c;
}
printf("%d\n",edmondsKarp());
}
return 0;
}
hdoj-1532-edmondsKarp最大流算法模板
最新推荐文章于 2019-03-02 18:29:34 发布