poj1273 Drainage Ditches

Posted 天道酬勤007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1273 Drainage Ditches相关的知识,希望对你有一定的参考价值。

/**
题目:poj1273 Drainage Ditches
链接:http://poj.org/problem?id=1273
题意:裸的最大流
思路:裸的最大流

*/
#include<iostream>
#include<cstring>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
typedef long long LL;
const int N = 250;
struct edge{
    int to, cap, rev;
};
vector<edge> G[N];
bool used[N];
void add_edge(int from,int to,int cap)
{
    G[from].push_back((edge){to,cap,G[to].size()});
    G[to].push_back((edge){from,0,G[from].size()-1});

}
int dfs(int v,int t,int f)
{
    if(v==t) return f;
    used[v] = true;
    for(int i = 0; i < G[v].size(); i++){
        edge&e = G[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;
                G[e.to][e.rev].cap += d;
                return d;
            }
        }
    }
    return 0;
}
LL max_flow(int s,int t)
{
    LL flow = 0;
    for(;;){
        memset(used, 0, sizeof used);
        int f = dfs(s,t,INF);
        if(f==0) return flow;
        flow+=f;
    }
}
int main()
{
    int n , m;
    while(scanf("%d%d",&m,&n)==2)
    {
        int u, v, cap;
        for(int i = 0; i <= n; i++) G[i].clear();

        for(int i = 0; i < m; i++){
            scanf("%d%d%d",&u,&v,&cap);
            add_edge(u,v,cap);
        }
        printf("%lld\n",max_flow(1,n));
    }
    return 0;
}

 

以上是关于poj1273 Drainage Ditches的主要内容,如果未能解决你的问题,请参考以下文章

poj 1273 Drainage Ditches(最大流)

POJ1273 Drainage Ditches

POJ 1273 Drainage Ditches

POJ-1273 Drainage Ditches 最大流

POJ 1273 Drainage Ditches 费用流

POJ 1273 Drainage Ditches (网络最大流)