您的位置:首页 > 大数据 > 人工智能

hdu 1532 Drainage Ditches 基础最大流

2012-04-21 18:15 489 查看
最朴素的最大流

有向图

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
#define N 202
#define INF 1<<30
int g

,n,m,pre
;

int bfs()
{
queue<int>q;
while(!q.empty())
q.pop();
memset(pre,0,sizeof(pre));
int k,i;
q.push(1);
pre[1] = 1;
int inc = INF ;
while(!q.empty())
{
k=q.front();
q.pop();
for(i=2;i<=m;++i)
if(pre[i]==0 && g[k][i])
{
inc = min(inc,g[k][i]);
pre[i]=k;
q.push(i);
if(i==m)
return inc;
}
}
return 0;
}
int flow()
{
int mf=0;
while(1)
{
int inc = bfs();
if(inc==0)
break;
mf+=inc;
int i,k;
for(i=m;i!=1;)
{
k=pre[i];
g[k][i]-=inc;
g[i][k]+=inc;
i=k;
}
}
return mf;
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
int s,e,c;
memset(g,0,sizeof(g));
while(n--)
{
scanf("%d%d%d",&s,&e,&c);
g[s][e]+=c;///可能存在重复的边
}
printf("%d\n",flow());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: