码迷,mamicode.com
首页 > 其他好文 > 详细

网络流 HDU 3549 Flow Problem

时间:2015-08-11 21:34:34      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:网络流   acm   

网络流 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\n", iCase++);
            continue;
        }

        long long cnt = MaxFlow(n);
        printf("Case %d: %lld\n", iCase++, cnt);

    }

    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/core__code

网络流 HDU 3549 Flow Problem

标签:网络流   acm   

原文地址:http://blog.csdn.net/core__code/article/details/47426287

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!