hdu 4292 (网络流)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
#define maxn 202
#define INF 0x7fffffff
int flow[maxn][maxn];
int s,e,n;
int fold_folkerson()
{
int father[maxn];
int visted[maxn];
int maxflow[maxn];
int sumflow=0;
queue<int> Q;
int u,i;
while(1)
{
memset(visted,0,sizeof(visted));
memset(maxflow,0,sizeof(maxflow));
maxflow[s]=INF;
Q.push(s);
visted[s]=1;
while(!Q.empty())
{
u=Q.front();
Q.pop();
for(i=1;i<=n;i++)
{
if(!visted[i]&&flow[u][i])
{
visted[i]=1;
father[i]=u;
Q.push(i);
maxflow[i]=min(maxflow[u],flow[u][i]);
}
}
if(maxflow[e]>0)
{
while(!Q.empty())
Q.pop();
break;
}
}
if(maxflow[e]==0)
break;
for(i=e;i!=s;i=father[i])
{
flow[father[i]][i]-=maxflow[e];
flow[i][father[i]]+=maxflow[e];
}
sumflow+=maxflow[e];
}
return sumflow;
}
int main()
{
int m,i,a,b,c;
while(~scanf("%d%d",&m,&n))
{
memset(flow,0,sizeof(flow));
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
flow[a][b]+=c;//这里需要防重边
}
s=1;e=n;
cout<<fold_folkerson()<<endl;
}
return 0;
}
975

被折叠的 条评论
为什么被折叠?



