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

poj 1273 网络流第一题 (pdf链接)

时间:2015-03-28 23:10:15      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

推荐一个学习网络流入门的资料   http://acm.pku.edu.cn/summerschool/gw_netflow.pdf

本题为网络流水题,也是pdf中将网络流的一道题,注意重边即可。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
using namespace std;
int n,m;
long long g[250][250];
int vis[250];
int pre[250];
long long Augmented()
{

    memset(vis,0,sizeof(vis));
    memset(pre,0,sizeof(pre));
    queue<int> que;
    while(!que.empty()){
        que.pop();
    }
    que.push(1);
    vis[1]=1;
    bool flag=false;
    while(!que.empty()){
        int d=que.front();
        que.pop();
        for(int i=1;i<=m;i++){
            if(g[d][i]>0 && !vis[i]){
                pre[i]=d;
                vis[i]=1;
                if(i==m){

                    flag=true;
                    while(!que.empty()){
                        que.pop();
                    }
                    break;
                }
                else{

                    que.push(i);
                }
            }
        }
    }
    if(flag){
        long long  Min= 999999999;
        int d=m;
        while(pre[d]){
            Min=min(Min,g[pre[d]][d]);
            d=pre[d];
        }
        d=m;
        while(pre[d]){
            g[pre[d]][d]-=Min;
            g[d][pre[d]]+=Min;
            d=pre[d];
        }
        return Min;
    }
    return 0;
}
int main()
{
    while(~scanf("%d%d",&n,&m)){
        memset(g,0,sizeof(g));
        for(int i=0;i<n;i++){
            int u,v;
            long long w;
            scanf("%d%d%lld",&u,&v,&w);
            g[u][v]+=w;
        }
        long long flow;
        long long maxflow=0;
        while(flow=Augmented()){
            maxflow+=flow;
        }
        printf("%lld\n",maxflow);
    }
    return 0;
}

 

poj 1273 网络流第一题 (pdf链接)

标签:

原文地址:http://www.cnblogs.com/Scale-the-heights/p/4374879.html

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