POJ 1273 -Drainage Ditches
2015-06-07 22:06
417 查看
Time Limit:1000MS Memory Limit:10000K
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.
每次下雨的时候,农场主John的农场里就会形成一个池塘,这样就会淹没其中一小块土地,在这块土地上种植了Bessie最喜欢的苜蓿。这意味着苜蓿要被水淹没一段时间,而后要花很长时间才能重新长出来。因此,John修建了一套排水系统,这样种植了苜蓿的土地就不会被淹没。雨水被排到了附近的一条小河中。作为一个一流的工程师,John还在每条排水沟的起点安装了调节阀门,这样可以控制流入排水沟的水流的速度。
John不仅知道每条排水沟每分钟能排多少加仑的水,而且还知道整个排水系统的布局,池塘里的水通过这个排水系统排到排水沟,并最终排到小何中,构成一个复杂的排水网络。
给定排水系统,计算池塘能通过这个排水系统排水到小河中的最大水流速度。每条排水沟的流水方向是单方向的,但在排水系统中,流水可能构成循环。
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.
输入文件中包含多个测试数据。每个测试数据的第1行为两个整数M和N,用空格隔开。0≤M≤200,2≤N≤200,其中M是排水沟的数目,N是这些排水沟形成的汇合结点数目。结点1为池塘,结点N为小河。接下来有M行,每行描述了一条排水沟,用三个整数来描述:Si,Ei和Ci,其中Si和Ei(1≤Si,Ei≤N)标明了这条排水沟的起点和终点,水流从Si流向Ei,Ci(0≤Ci≤10 000 000)表示通过这条排水沟的最大流水速度。
[b]Output[/b]
For each case, output a single integer, the maximum rate at which water may emptied from the pond.
对于输入文件中的每个测试数据,输出一行,为一个整数,表示整个排水系统可以从池塘排出水的最大速度。
Sample Input
Sample Output
[b]Source[/b]
USACO 93
然而这道题目就是赤裸裸的求容量网络中的最大流...
代码:
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.
每次下雨的时候,农场主John的农场里就会形成一个池塘,这样就会淹没其中一小块土地,在这块土地上种植了Bessie最喜欢的苜蓿。这意味着苜蓿要被水淹没一段时间,而后要花很长时间才能重新长出来。因此,John修建了一套排水系统,这样种植了苜蓿的土地就不会被淹没。雨水被排到了附近的一条小河中。作为一个一流的工程师,John还在每条排水沟的起点安装了调节阀门,这样可以控制流入排水沟的水流的速度。
John不仅知道每条排水沟每分钟能排多少加仑的水,而且还知道整个排水系统的布局,池塘里的水通过这个排水系统排到排水沟,并最终排到小何中,构成一个复杂的排水网络。
给定排水系统,计算池塘能通过这个排水系统排水到小河中的最大水流速度。每条排水沟的流水方向是单方向的,但在排水系统中,流水可能构成循环。
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.
输入文件中包含多个测试数据。每个测试数据的第1行为两个整数M和N,用空格隔开。0≤M≤200,2≤N≤200,其中M是排水沟的数目,N是这些排水沟形成的汇合结点数目。结点1为池塘,结点N为小河。接下来有M行,每行描述了一条排水沟,用三个整数来描述:Si,Ei和Ci,其中Si和Ei(1≤Si,Ei≤N)标明了这条排水沟的起点和终点,水流从Si流向Ei,Ci(0≤Ci≤10 000 000)表示通过这条排水沟的最大流水速度。
[b]Output[/b]
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
[b]Source[/b]
USACO 93
然而这道题目就是赤裸裸的求容量网络中的最大流...
代码:
var c,e,n,m,i,s,t:longint; ans,inf:int64; h,d,f,g:array[0..5000]of longint; ot,cap,ne:array[0..100000]of longint; procedure addedge(x,y,z:longint); begin ot[e]:=y; ne[e]:=g[x]; cap[e]:=z; g[x]:=e; inc(e); ot[e]:=x; ne[e]:=g[y]; cap[e]:=0; g[y]:=e; inc(e); end; function min(a,b:int64):int64; begin if a<b then exit(a) else exit(b); end; function bfs:boolean; var l,r,x,p:int64; begin for i:=1 to n do d[i]:=n+10; l:=0; r:=1; h[1]:=s; d[s]:=0; while l<r do begin inc(l); p:=g[h[l]]; while p<>-1 do begin if (cap[p]<>0)and(d[ot[p]]>d[h[l]]+1) then begin inc(r); h[r]:=ot[p]; d[ot[p]]:=d[h[l]]+1; end; p:=ne[p]; end; end; exit(d[t]<>n+10); end; function dfs(x,flow:int64):int64; var p,tmp:int64; begin if x=t then exit(flow); p:=f[x]; dfs:=0; while (p<>-1)and(dfs<flow) do begin if (cap[p]<>0)and(d[ot[p]]=d[x]+1) then begin tmp:=dfs(ot[p],min(flow-dfs,cap[p])); dec(cap[p],tmp); inc(cap[p xor 1],tmp); inc(dfs,tmp); end; p:=ne[p]; end; f[x]:=p; end; begin inf:=high(int64); while not eof do begin readln(m,n); e:=0; fillchar(g,sizeof(g),255); for i:=1 to m do begin readln(s,t,c); addedge(s,t,c); end; s:=1; t:=n; ans:=0; while bfs do begin for i:=1 to n do f[i]:=g[i]; inc(ans,dfs(s,inf)); end; writeln(ans); end; end.
相关文章推荐
- LeetCode --- Climbing Stairs
- HDOJ 1787 GCD Again(欧拉函数)
- leetCode 之 Contains Duplicate
- LeetCode172:Factorial Trailing Zeroes
- Climbing Stairs
- hdu 1104 Remainder 队列
- hdu 1104 Remainder 队列
- xiugaicrontab默认编辑器
- HDU 5240 E - Exam(2015 ACM-ICPC China Shanghai Metropolitan Programming Contest)
- BZOJ 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝( dp )
- poj 1273 Drainage Ditches 【最大流入门 dinic算法】
- NOI2011阿狸的打字机(fail树+DFS序)
- 【转】Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法
- LeetCode Contains Duplicate III
- 使用ssh框架时出现 failed to lazily initialize 或者 no session 异常
- 人工智能搜索算法(深度优先、迭代加深、一致代价、A*搜索)
- URAL 1457. Heating Main
- Contains Duplicate
- 如何在 Ubuntu 中更改默认浏览器和 Email 客户端
- ISP Pipeline的关键模块之Demosaic( 三)