POJ 1273 Drainage Ditches

额,又做了一遍哈,不过有一段时间没学最大流了,就当是复习复习挺好!

View Code
#include <stdio.h>
#include <string.h>

#define N 202

int map[N][N];
int queue[N];
int pre[N];

int Edmonds_Karp(int start,int end,int n)
{
int i,cur,front,rear;
int maxflow=0;
while(true)
{
front=rear=0; queue[rear]=start;
memset(pre,-1,sizeof(pre)); pre[start]=0;
while(front<=rear)
{
cur=queue[front++];
for(i=1;i<=n;i++)
{
if(map[cur][i] && pre[i]==-1)
queue[++rear]=i,pre[i]=cur;
}
if(pre[end]!=-1) break;
}

if(pre[end]==-1) break;

int minflow=0x7fffffff;
for(cur=end;cur!=start;cur=pre[cur])
{
if(minflow>map[pre[cur]][cur])
minflow=map[pre[cur]][cur];
}
maxflow+=minflow;
for(cur=end;cur!=start;cur=pre[cur])
{
map[pre[cur]][cur]-=minflow;
map[cur][pre[cur]]+=minflow;
}
}

return maxflow;
}

int main()
{
int n,m;
int i,v,u,flow;
//freopen("input.txt","r",stdin);
while(scanf("%d %d",&n,&m)!=EOF)
{
memset(map,0,sizeof(map));
for(i=0;i<n;i++)
{
scanf("%d %d %d",&v,&u,&flow);
map[v][u]=flow;
}

printf("%d\n",Edmonds_Karp(1,m,m));
}
return 0;
}

这个Edmonds_Karp看这就是舒服呵,不想Dinic那么复杂!

就是不断找增广路。。。直到没有增广路。。。结束!

需要注意的是,这里的亮点是:pre[N]这个数组,记录路线的数组,挺不错的!

原文地址:https://www.cnblogs.com/fornever/p/2220740.html