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

poj 1273 Drainage Ditches (最大流入门)

时间:2016-06-03 21:14:59      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

 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 (最大流入门)

标签:

原文地址:http://www.cnblogs.com/pblr/p/5557479.html

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