• POJ-1273 Drainage Ditches


    题目大意:

    给出N条排水沟的起点和终点及其最大排水量,点1是池塘,点M是小河,让你求出整个排水系统的最大排水量

    解题思路:

    这题是一道最大流的入门题,非常适合入门。

    《挑战程序设计竞赛》一书中对于Ford-Fulkerson算法的讲解算是比较容易让人理解的了。

    这里直接用了书上的代码作了略微修改ac了这道题,第一道网络流

    代码:

    #include <cstdio>
    #include <vector>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    //用于表示边的结构体
    typedef struct node{
        int to, cap, rev;   //终点、容量、反向边
        node(int a = 0, int b = 0, int c = 0){
            to = a; cap = b; rev = c;
        }
    }edge;
    
    const int maxn = 200 + 5;
    const int INF = 0x3f3f3f3f;
    
    vector<edge> vec[maxn]; //图的邻接表表示
    bool used[maxn];        //DFS中用到的访问标记
    
    //向图中增加一条从s到t容量为cap的边
    void add_edge(int from, int to, int cap){
        vec[from].push_back(edge(to, cap, vec[to].size()));
        vec[to].push_back(edge(from, 0, vec[from].size()-1));
    }
    //通过DFS寻找增广路
    int dfs(int v, int t, int f){
        if(v == t) return f;
        used[v] = true;
        int len = vec[v].size();
        for(int i = 0; i < len; ++i){
            edge& e = vec[v][i];
            if(!used[e.to] && e.cap > 0){
                int d = dfs(e.to, t, min(f, e.cap));
                if(d > 0){
                    e.cap -= d;
                    vec[e.to][e.rev].cap += d;
                    return d;
                }
            }
        }
        return 0;
    }
    //求解从s到t的最大流
    int max_flow(int s, int t){
        int flow = 0;
        while(true){
            memset(used, 0, sizeof(used));
            int f = dfs(s, t, INF);
            if(f == 0) return flow;
            flow += f;
        }
    }
    int main(){
        int a, b, c, n, m;
        while(~scanf("%d%d", &n, &m)){
            for(int i = 0; i <= m; ++i) vec[i].clear();
            for(int i = 0; i < n; ++i){
                scanf("%d%d%d", &a, &b, &c);
                add_edge(a, b, c);
            }
            printf("%d
    ", max_flow(1, m));
        }
        return 0;
    }


  • 相关阅读:
    分布式事务与Seate框架(3)——Seata的AT模式实现原理
    MySQL是如何实现事务隔离?
    分布式事务与Seate框架(2)——Seata实践
    分布式事务与Seate框架(1)——分布式事务理论
    docker的安装以及使用命令
    Sentinel高级
    Sentinel熔断降级
    typora+PicGo+gitee搭建免费的的床
    Jmeter + Grafana + InfluxDB 性能测试监控
    Jmeter-逻辑控制器ForEach Controller的实例运用
  • 原文地址:https://www.cnblogs.com/wiklvrain/p/8179413.html
Copyright © 2020-2023  润新知