Drainage Ditches - poj 1273(网络流模板)

题意:1是源点,m是汇点,求出来最大流量,没什么好说的就是练习最大流的模板题

**************************************************************

先用Edmonds-Karp的算法做一下试试吧

重边贡献了 1W,要加上所有的重边才算是两点间最大流量

*************************************************************************

/************************************/
/** 使用Edmonds-Karp 最短增广路算法*/
/** 邻接矩阵实现                   */
/** 2015/8/7/9:39                   */
/************************************/

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;

const int MAXN = 205;
const int oo = 1e9+7;

///1是源点,M是汇点,N条边
int G[MAXN][MAXN], M, N;
int pre[MAXN];///记录每个点的前驱,也就是父节点
bool used[MAXN];

///s代表源点,e代表汇点,可以到达汇返回true,否则返回false
bool BFS(int s, int e)
{
    memset(used, false, sizeof(used));
    queue<int> Q;
    Q.push(s);
    used[s] = true;

while(Q.size())
    {
        s = Q.front();Q.pop();

if(s == e) return true;

for(int i=1; i<=M; i++)
        {
            if(G[s][i] && !used[i])
            {
                pre[i] = s;
                used[i] = true;
                Q.push(i);
            }
        }
    }

return false;
}
int Karp(int s, int e)
{
    int MaxFlow = 0;

while( BFS(s, e) == true )
    {///如果有增量
        int MinFlow = oo, v;

v = e;

while(v != s)
        {///求出来路径上最小流量
            MinFlow = min(MinFlow, G[pre[v]][v]);
            v = pre[v];
        }

MaxFlow += MinFlow;
        v = e;

while(v != s)
        {///边上的所有点减去最小流量,反边增加流量
            G[pre[v]][v] -= MinFlow;
            G[v][pre[v]] += MinFlow;

v = pre[v];
        }
    }

return MaxFlow;
}

int main()
{
    while(scanf("%d%d", &N, &M) != EOF)
    {
        int i, u, v, c;

memset(G, false, sizeof(G));

for(i=1; i<=N; i++)
        {
            scanf("%d%d%d", &u, &v, &c);
            G[u][v] += c;///有重边,两点间应该算上所有边
        }

printf("%d\n", Karp(1, M));
    }

return 0;
}

时间: 2024-10-12 02:26:28

Drainage Ditches - poj 1273(网络流模板)的相关文章

Drainage Ditches (poj 1273 &amp;&amp; hdu 1532 网络流之Ford-Fulkerson)

Language: Default Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 59676   Accepted: 22909 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clo

(网络流 模板 Dinic) Drainage Ditches --POJ --1273

链接: http://poj.org/problem?id=1273 代码: #include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; const int MAXN = 1005; const int oo = 1e9+7; struct Edge { int v, flow, next; }edge[MAXN]; int Hea

POJ 1273 Drainage Ditches(初识网络流)

开始研究网络流了,看了两个晚上吧,今天总算动手实践一下,有了更深的理解 总结一下:在最大流中,容量与实际流量满足3点: 1.实际流量<=容量 2.任意两点之间   : 流量(a->b)==流量(b->a) 3.流量守恒原则   :从s流出的流量 == t流入的流量 一.为什么叫增广路,因为在所有的流量网络中,会存在一个残量,所以在整个残量网络中,找到一个最小值,加到所有的流量线路里,便叫增广. 二.为什么要修改反向流量,因为在更新流量网时,当前选择的并不一定就是最优解,比如u->v

[POJ 1273] Drainage Ditches &amp; 最大流Dinic模板

Drainage Ditches Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a

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

推荐一个学习网络流入门的资料   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; lon

poj 1273 Drainage Ditches (最大流入门)

1 /****************************************************************** 2 题目: Drainage Ditches(POJ 1273) 3 链接: http://poj.org/problem?id=1273 4 题意: 现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条 5 水渠,给出这n条水渠所连接的池塘和所能流过的水量,求水 6 渠中所能流过的水的最大容量.水流是单向的. 7 算法: 最大流之增广路(入门)

POJ 1273 Drainage Ditches (网络流Dinic模板)

Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of drainage

POJ 1273 Drainage Ditches(网络流dinic算法模板)

POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdio.h> #include <algorithm> #include <queue> #include <string.h> /* POJ 1273 dinic算法模板 边是有向的,而且存在重边,且这里重边不是取MAX,而是累加和 */ using namespace

POJ 1273 Drainage Ditches(网络流模板)

Description: Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of drainage