zoukankan      html  css  js  c++  java
  • 网络流 HDU 3549 Flow Problem

    网络流 HDU 3549 Flow Problem


    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549


    用增广路算法进行求解。注意的问题有两个:

    1. 每次增广的时候,反向流量也要进行更行。一開始没注意,WA了几次 ORZ

    2. 对于输入的数据,容量要进行累加更新。


    // 邻接矩阵存储
    
    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int INF = 0x7fffffff;
    const int M = 15+5;
    int c[M][M];    // capacity
    int f[M][M];    // flow
    int flow[M];    // current flows
    int p[M];       // path
    
    // 增广路算法
    long long MaxFlow(int n)
    {
        long long cnt = 0;
        while(true)
        {
            queue<int> q;
            q.push(1);
            memset(flow, 0, sizeof(flow));
            flow[1] = INF;
    
            while(!q.empty())
            {
                int u = q.front();
                q.pop();
    
                for(int v=1; v<=n; ++v)
                {
                    if ( u != v && c[u][v] > f[u][v] && !flow[v] /*避免回环*/ )
                    {
                        q.push(v);
                        flow[v] = min(flow[u], c[u][v]-f[u][v]);
                        p[v] = u;
                    }
                }
            }
    
            if (flow[n]==0)
                break;  // 无增广了, 退出
    
            // 进行增广
            //cout<<flow[n]<<endl;
            for(int v=n; v != 1; v=p[v])
            {
                f[p[v]][v] += flow[n];
                f[v][p[v]] -= flow[n];  // 反向更新, 有流入。流出自然也应该添加!

    WA 了几次才发现 orz } cnt += flow[n]; } return cnt; } int main(void) { //freopen("in.txt", "r", stdin); int iCase =1; int t = 0; cin>>t; while(t--) { memset(c, 0, sizeof(c)); memset(f, 0, sizeof(f)); int n, m; scanf("%d%d", &n, &m); for(int i=0; i<m; ++i) { int s,e,v; scanf("%d%d%d", &s, &e, &v); c[s][e] += v; // 流入的容量要进行累加 } // 特例直接推断 if (n <= 1 || m < 1) { printf("Case %d: 0 ", iCase++); continue; } long long cnt = MaxFlow(n); printf("Case %d: %lld ", iCase++, cnt); } return 0; }



  • 相关阅读:
    Vue.js+express建站
    单页应用(SPA)简介
    Z形记之CentOS7
    Z形记之比较两个目录下文件异同
    Z形记之Linux的那些事:安装Nginx
    SQL之修改字段类型
    Scrapy系列之爬取豆瓣电影
    Scrapy和MongoDB的应用---爬取
    BigDecimal类的常用算法
    回到顶部功能
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6943402.html
Copyright © 2011-2022 走看看