• - > 网络流(【最大流】草地排水模板题)


    1993 草地排水

     

    USACO

     时间限制: 2 s
     空间限制: 256000 KB
     题目等级 : 钻石 Diamond
     
     
     
    题目描述 Description

    在农夫约翰的农场上,每逢下雨,Bessie最喜欢的三叶草地就积聚了一潭水。这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间。因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没的烦恼(不用担心,雨水会流向附近的一条小溪)。作为一名一流的技师,农夫约翰已经在每条排水沟的一端安上了控制器,这样他可以控制流入排水沟的水流量。

    农夫约翰知道每一条排水沟每分钟可以流过的水量,和排水系统的准确布局(起点为水潭而终点为小溪的一张网)。需要注意的是,有些时候从一处到另一处不只有一条排水沟。

    根据这些信息,计算从水潭排水到小溪的最大流量。对于给出的每条排水沟,雨水只能沿着一个方向流动,注意可能会出现雨水环形流动的情形。

    输入描述 Input Description

    第1行: 两个用空格分开的整数N (0 <= N <= 200) 和 M (2 <= M <= 200)。N是农夫John已经挖好的排水沟的数量,M是排水沟交叉点的数量。交点1是水潭,交点M是小溪。

    第二行到第N+1行: 每行有三个整数,Si, Ei, 和 Ci。Si 和 Ei (1 <= Si, Ei <= M) 指明排水沟两端的交点,雨水从Si 流向Ei。Ci (0 <= Ci <= 10,000,000)是这条排水沟的最大容量。

    输出描述 Output Description

    输出一个整数,即排水的最大流量。

    样例输入 Sample Input
    5 4
    1 2 40
    1 4 20
    2 4 20
    2 3 30
    3 4 10
    样例输出 Sample Output

    50

    数据范围及提示 Data Size & Hint
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue> 
    #define MAXN 300
    #define INF 9999999
    using namespace std;
    int N,M,map[MAXN][MAXN],a,b,f,maxflow,pre[MAXN];
    void flow(int start,int end){
        while(1){
            queue<int>q;
            /*while(!q.empty())
                q.pop();*/        
            int minflow=INF;
            q.push(1);
            memset(pre,0,sizeof(pre));
            while(!q.empty()){
                int u=q.front();
                q.pop();
                if(u==end)    break; 
                for(int i=1;i<=M;i++)
                    if(map[u][i]&&!pre[i]){
                        pre[i]=u;
                        q.push(i);
                    }
            }
            if(pre[end]==0)    break;
            for(int i=end;i!=start;i=pre[i])
                minflow=min(minflow,map[pre[i]][i]);
            for(int i=end;i!=start;i=pre[i]){
                map[pre[i]][i]-=minflow;
                map[i][pre[i]]+=minflow;
            }
            maxflow+=minflow;
        }
    }
    int main(){
        cin>>N>>M;
        for(int i=1;i<=N;i++){
            cin>>a>>b>>f;
            map[a][b]+=f;
        }
        maxflow;    //最大流 
        flow(1,M);
        cout<<maxflow;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    Day 43
    Day 42
    Day 41
    Day 40
    Linux下查看服务器的产品型号和序列号
    AgileController Portal认证成功后弹出找不到指定位置的资源
    华三交换机snmp开通
    FusionCompute 6.3.0 CNA系统安装
    集群IMC策略
    静态路由配置语法
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/6502916.html
Copyright © 2020-2023  润新知