HDU 1532 Drainage Ditches (最大网络流)
2016-07-24 12:33
423 查看
Drainage Ditches
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 5 Accepted Submission(s) : 3
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem 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 ditches so that Bessie's clover patch is never covered in water. Instead, the water is drained to a nearby stream. Being an ace engineer, Farmer John has also installed regulators at the beginning of each ditch, so he can control at what rate water flows into that ditch.Farmer John knows not only how many gallons of water each ditch can transport per minute but also the exact layout of the ditches, which feed out of the pond and into each other and stream in a potentially complex network.
Given all this information, determine the maximum rate at which water can be transported out of the pond and into the stream. For any given ditch, water flows in only one direction, but there might be a way that water can flow in a circle.
Input
The input includes several cases. For each case, the first line contains two space-separated integers, N (0 <= N <= 200) and M (2 <= M <= 200). N is the number of ditches that Farmer John has dug. M is the number of intersections points for those ditches. Intersection 1 is the pond. Intersection point M is the stream. Each of the following N lines contains three integers, Si, Ei, and Ci. Si and Ei (1 <= Si, Ei <= M) designate the intersections between which this ditch flows. Water will flow through this ditch from Si to Ei. Ci (0 <= Ci <= 10,000,000) is the maximum rate at which water will flow through the ditch.Output
For each case, output a single integer, the maximum rate at which water may emptied from the pond.Sample Input
5 4 1 2 40 1 4 20 2 4 20 2 3 30 3 4 10
Sample Output
50
#include <iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; const int inf=0x7fffffff; int vis[202],pre[202],mp[202][202]; int i,n,m,sum; long long ans; int bfs() { int findpath=0; queue<int> Q; memset(vis,0,sizeof(vis)); memset(pre,0,sizeof(pre)); pre[1]=0; vis[1]=1; Q.push(1); while(!Q.empty()) { int u=Q.front(); Q.pop(); for(int i=1;i<=n;i++) if(mp[u][i]>0 && !vis[i]) { vis[i]=1; pre[i]=u; Q.push(i); if (i==n) {findpath=1; break;} } } if (!findpath) return 0; int maxflow=inf; int v=n; while(pre[v]>0) { maxflow=min(maxflow,mp[pre[v]][v]); v=pre[v]; } v=n; while(pre[v]>0) { mp[v][pre[v]]+=maxflow; mp[pre[v]][v]-=maxflow; v=pre[v]; } return maxflow; } int main() { while(~scanf("%d%d",&m,&n)) { memset(mp,0,sizeof(mp)); for(i=1;i<=m;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); mp[x][y]+=z;//找了好久的错误,最后发现可能有好多条重复的,要累加 } ans=0; while(sum=bfs()) ans+=sum; printf("%d\n",ans); } return 0; }
相关文章推荐
- golang的垃圾回收与Finalizer——tcp连接是如何被自动关闭的
- Error fetching https://ruby.taobao.org/:RubySass淘宝镜源无效解决
- 使用Devstack部署neutron网络节点
- android网络监控下的观察者模式运用
- 用Fiddler模拟低速网络环境 差网络模拟工具 http 500是什么意思?
- Android Apache common ftp开源库以及http区别分析
- http协议中的头部字段:Transfer-Encoding
- centOS6下配置网络,解决上网问题
- TCP 连接的建立和释放
- TCPDUMP介绍和使用那个
- 揭开网络编程常见API的面纱【下】
- 揭开网络编程常见API的面纱【上】
- Linux网络编程:原始套接字的魔力【续】
- Linux网络编程:原始套接字的魔力【下】
- Linux网络编程:原始套接字的魔力【上】
- Linux网络编程:基于UDP的程序开发回顾篇
- Linux网络编程:基于TCP的程序开发回顾篇
- Linux环境下网络编程杂谈
- (十)洞悉linux下的Netfilter&iptables:网络地址转换原理之SNAT
- (九)洞悉linux下的Netfilter&iptables:网络地址转换原理之DNAT