zoukankan      html  css  js  c++  java
  • 最大流模板

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    using namespace std;
    int pre[500],flow[500][500],dis[500];
    int map[500][500];
    int maxflow;
    int n,m;
    int ek(int begin ,int end)
    {
        int i,x;
        maxflow=0;
        queue<int>p;
        while(!p.empty())
        {
            p.pop();
        }
        memset(flow,0,sizeof(flow));
        while(1)
        {
            memset(dis,0,sizeof(dis));
            dis[begin]=9999999;
            p.push(begin);
            while(!p.empty())
            {
                x=p.front();
                p.pop();
                for(i=1; i<=m; i++)
                {
                    if(map[x][i]>flow[x][i]&&!dis[i])
                    {
                        p.push(i);
                        pre[i]=x;
                        dis[i]=min(dis[x],map[x][i]-flow[x][i]);
                    }
                }
            }
            if(dis[end]==0)
            {
                return maxflow;
            }
            for(i=end; i!=begin; i=pre[i])
            {
                flow[pre[i]][i]+=dis[end];
                flow[i][pre[i]]-=dis[end];
            }
            maxflow+=dis[end];
        }
    }
    int main()
    {
        int i,u,v,w;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(map,0,sizeof(map));
            memset(pre,0,sizeof(pre));
            for(i=1; i<=n; i++)
            {
                scanf("%d%d%d",&u,&v,&w);
                map[u][v]+=w;
            }
            printf("%d
    ",ek(1,m));
        }
        return 0;
    }

     B - Drainage Ditches

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=253#problem/B

    // 网络最大流模板
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <queue>
    
    using namespace std;
    int map[501][501];  // map[][]用于存储最大流量
    int flow[501][501]; //flow[][]用于存储当前流量
    int dis[501];      // 用于记录每次进行增广路径时的最窄的那条路径(短板效应)
    int maxflow;        // 用于存储更新最大流
    int pre[501];        //由于记录当前节点的前一个节点,便于更新数据
    int n,m;
    int EK(int begin,int end)
    {
        int x,i;
        queue<int>p;
        maxflow = 0;
        while(!p.empty())
        {
            p.pop();       //清空新建的队列
        }
        memset(flow,0,sizeof(flow));
        while(1)
        {
            memset(dis,0,sizeof(dis));
            dis[begin] = 9999999;    //将刚开始的余量,所要加的流量值设置为无穷
            p.push(begin);           //将第一个元素加入队列中
            while(!p.empty())
            {
                x = p.front();        //取出第一个元素
                p.pop();              //删除第一个元素
                for(i = 1;i<=m;i++)
                {
                    if(map[x][i]>flow[x][i] && !dis[i])  // 倘若流量还能流进该路,(残余网络)并且该点还没有经过
                    {
                        p.push(i);                                 // 将该点加入到队列中
                        pre[i] = x;                                //记录i的前驱结点,便于更新方便
                        dis[i] = min(dis[x],map[x][i] - flow[x][i]);      // 更新 dis[]数组
                    }
                }
            }
            if(dis[end] == 0)                                       //当无增广路径时,跳出循环
            return maxflow;
            for(i = end;i!=begin;i = pre[i])
            {
                flow[pre[i]][i]+=dis[end];                       //当流量为正向弧,加上新增的流量
                flow[i][pre[i]]-=dis[end];                       //当流量流经的是反向弧,减去新增的流量,退流。
            }
            maxflow+=dis[end];
        }
    }
    int main()
    {
        int i,u,v,w;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(map,0,sizeof(map));
            memset(pre,0,sizeof(pre));
            memset(flow,0,sizeof(flow));
            for(i = 1;i<=n;i++)
            {
                scanf("%d%d%d",&u,&v,&w);
                map[u][v]+=w;
            }
            printf("%d
    ",EK(1,m));
        }
        return 0;
    }
  • 相关阅读:
    Requests爬虫
    1.3预处理与热图
    1.2为多变量数据绘制散点阵图
    urllib爬虫(流程+案例)
    1.1用图表分析单变量数据
    tkinter python(图形开发界面)
    mysql及python交互
    正则表达式
    python--map()、reduce()
    python--__init__()方法和__new__()方法
  • 原文地址:https://www.cnblogs.com/yangyongqian/p/3919890.html
Copyright © 2011-2022 走看看