zoukankan      html  css  js  c++  java
  • 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]这个数组,记录路线的数组,挺不错的!

  • 相关阅读:
    商务通服务器版LR_Data目录下相关配置文件
    Python入门神图
    你不知道的JavaScript-2.词法作用域
    你不知道的JavaScript-1.作用域是什么
    linux服务器对外打包处理
    C# Form 关闭按钮灰化
    Spread常用属性
    Spread 常用属性
    C#打开关闭窗体事件顺序
    sqlserver如何使用日期计算
  • 原文地址:https://www.cnblogs.com/fornever/p/2220740.html
Copyright © 2011-2022 走看看