题意:m个点,n条有向边,求从源点1到汇点m的最大流量;
网络流的经典题目,今天刚看了网络流的ppt,就着ppt上的例题模板写的,Edmond-Karp 最短增广路算法;
#include <iostream>
#include<cmath>
#include<cstdio>
#include<queue>
#include<cstring>
#define N 250
#define INF 0x3f3f3f3f
using namespace std;
int v[N],pre[N],e[N][N],n,m;
int EK()
{
memset(v,0,sizeof(v));
memset(pre,0,sizeof(pre));
queue<int> q;
q.push(1);
v[1]=1;
int flag=0;
while(!q.empty())
{
int t=q.front();
q.pop();
if(t==m)
{
flag=1;
break;
}
for(int i=1;i<=m;i++)
{
if(!v[i]&&e[t][i])
{
pre[i]=t;
v[i]=1;
q.push(i);
}
}
}
if(flag==0) return 0;
int mmin=INF;
int v=m;
while(pre[v])
{
mmin=min(mmin,e[pre[v]][v]);
v=pre[v];
}
v=m;
while(pre[v])
{
e[pre[v]][v]-=mmin;
e[v][pre[v]]+=mmin;
v=pre[v];
}
return mmin;
}
int main()
{
while(cin>>n>>m)
{
memset(e,0,sizeof(e));
for(int i=0;i<n;i++)
{
int a,b,c;
cin>>a>>b>>c;
e[a][b]+=c;
}
int ans=0,Min=0;
while(Min=EK()) ans+=Min;
cout<<ans<<endl;
}
}