pku Drainage Ditches 简单最大流 直接套模板 注意可能有重边

#include<stdio.h>
#include
<string.h>
#define MAX 201
int m,n; //结点数
int maxflow; //最大流
int mat[MAX][MAX],pre[MAX],p[MAX];
int queue[MAX*MAX];
int min(int a,int b)
{
if(a<b) return a;
else return b;
}
void Edmonds_Karp(int s,int t)
{
while(1)
{
p[s]
=99999999;
memset(pre,
0,sizeof(pre));
int head=0,tail=1;
queue[
0]=s;
while(head!=tail)
{
int i=queue[head++];
for(int j=1;j<=m;j++)
{
if(j!=i && !pre[j] && mat[i][j]>0)
{
p[j]
=min(p[i],mat[i][j]);
queue[tail
++]=j;
pre[j]
=i;
}
}
}
if(pre[t]==0) break;
int i=t;
while(i!=s)
{
int j=pre[i];
mat[j][i]
-=p[t];
mat[i][j]
+=p[t];
i
=j;
}
maxflow
+=p[t];
}
}
int main()
{
int i;
int a,b,c;
while(scanf("%d%d",&n,&m)!=EOF)
{
maxflow
=0;
memset(mat,
0,sizeof(mat));
for(i=0;i<n;i++)
{
scanf(
"%d%d%d",&a,&b,&c);
mat[a][b]
+=c;
}
Edmonds_Karp(
1,m);
printf(
"%d\n",maxflow);
}
return 0;
}

 

posted on 2010-05-17 23:36  keep going  阅读(250)  评论(0编辑  收藏  举报