zoukankan      html  css  js  c++  java
  • HDU-3549Flow Problem 最大流模板题

    传送门

    这里是Ford-Fulkerson写的最大流模板

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <map>
    #include <set>
    #include <queue>
    #include <list>
    #include <iterator>
    #include <cmath>
    using namespace std;
    
    #define lson (l , mid , rt << 1)
    #define rson (mid + 1 , r , rt << 1 | 1)
    #define debug(x) cerr << #x << " = " << x << "
    ";
    #define pb push_back
    #define pq priority_queue
    
    #define Pll pair<ll,ll>
    #define Pii pair<int,int>
    
    #define fi first
    #define se second
    
    #define OKC ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
    typedef long long ll;
    typedef unsigned long long ull;
    const int inf = 0x3f3f3f3f;
    
    /*-----------------show time----------------*/
    const int maxn = 1e3+9;
    struct node {
        int to,cap,rev;
    };
    
    vector<node>mp[maxn];
    bool used[maxn];
    
    void add_edge(int from,int to,int cap)
    {
        mp[from].pb((node){to,cap,(int)mp[to].size()});
        mp[to].pb((node){from,0,(int)mp[from].size()-1});   
    }
    
    int dfs(int v,int t,int f)
    {
        if(v==t)return f;
        used[v] = true;
        for(int i=0; i<mp[v].size(); i++)
        {
            node &e = mp[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;
                    mp[e.to][e.rev].cap += d;
                    return d;
                }
            }
        }
        return 0;
    }
    
    int max_flow(int s,int t)
    {
        int flow = 0;
        for(;;)
        {
            memset(used,0,sizeof(used));
            int f = dfs(s,t,inf);
            if(f==0)return flow;
            flow += f;
        }
    }
    int main(){
        int t,n,m;
        scanf("%d", &t);
        for(int T=1; T<=t;T++)
        {
            scanf("%d%d", &n, &m);
            for(int i=0;i<=n;i++)mp[i].clear();
            for(int i=1; i<=m; i++)
            {
                int u,v,c;
                scanf("%d%d%d", &u, &v, &c);
                add_edge(u,v,c);
            }
            printf("Case %d: %d
    ",T,max_flow(1,n));
        }
    
        return 0;
    }
    HDU 3549
  • 相关阅读:
    MySQL中的用户与授权
    Vim安装使用和配置
    Mysql中的explain和desc
    array_map、array_walk、array_reduce
    PHP二维数组去重(指定键名)
    git配置ssh秘钥(公钥以及私钥)windows
    在nginx上用FastCGI解析PHP
    关于token登录逻辑分析
    公有云 私有云 混合云 的区别
    使用Docker在服务器上部署Ubuntu,本地传文件到docker
  • 原文地址:https://www.cnblogs.com/ckxkexing/p/9141885.html
Copyright © 2011-2022 走看看