zoukankan      html  css  js  c++  java
  • 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;
    }


  • 相关阅读:
    [SQL Server]如何激活一个账号
    sqlcmd命令详解
    SQL Server Express 2008 安装程序
    SharePoint中的本地化(Localization)
    2009十大企业应用产品
    2010年10大战略技术
    十个理由促使小企业敢于触碰“云计算”
    如何改进网站性能
    sqlcmd详细示例
    VMware网络配置详解
  • 原文地址:https://www.cnblogs.com/wiklvrain/p/8179413.html
Copyright © 2011-2022 走看看