poj 1273 Drainage Ditches (最大流入门)

Posted pb2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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  算法:     最大流之增广路(入门)
 8  算法思路: 不断用BFS找通路,没每找一条路,记录这条路的最小流,再
 9             给这条路上的所有流量减去这个最小值。
10 *********************************************************************/
11 #include<cstdio>
12 #include<iostream>
13 #include<cstring>
14 #include<algorithm>
15 #include<queue>
16 using namespace std;
17 
18 const int mx=222;
19 int cap[mx][mx];        ///两个端点的流量。
20 int flow[mx][mx];       ///两个端点已用的流量。
21 int a[mx],father[mx];
22 int m,n;
23 
24 int bfs()
25 {
26     queue<int>q;
27     int ans=0;
28     father[1]=-1;
29     while (1)
30     {
31         memset(a,0,sizeof(a));
32         a[1]=1000000000;
33         q.push(1);
34         ///找增广路
35         while (!q.empty())
36         {
37             int u=q.front();
38             q.pop();
39             for (int v=2;v<=n;v++)
40             {
41                 if (!a[v]&&cap[u][v]>flow[u][v])
42                 {
43                     father[v]=u;
44                     q.push(v);
45                     a[v]=min(a[u],cap[u][v]-flow[u][v]);
46                 }
47             }
48         }
49         if (a[n]==0) return ans;
50         for (int u=n;father[u]!=-1;u=father[u])
51         {
52             flow[u][father[u]]-=a[n];            ///更新反向流量        
53             flow[father[u]][u]+=a[n];           ///更新正向流量
54         }
55         ans+=a[n];                           
56     }
57 }
58 
59 int main()
60 {
61     while (~scanf("%d%d",&m,&n))
62     {
63         memset(cap,0,sizeof(cap));
64         memset(flow,0,sizeof(flow));
65         int u,v,w;
66         while (m--)
67         {
68             scanf("%d%d%d",&u,&v,&w);
69             cap[u][v]+=w;
70         }
71         int ans=bfs();
72         printf("%d\n",ans);
73     }
74 }

 

以上是关于poj 1273 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 (网络最大流)