POJ 1273 -Drainage Ditches

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.

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

Source

USACO 93

题目大意:是说John有个池塘,每到下雨时节池塘里会被水草覆盖,附近有条河,于是他想挖沟渠放水,将水草清除掉。给你一组数据,数据包括沟渠的数目和每条沟渠的最大容量(及水的最大流量),还有沟渠的交汇点的数目。要你按照数据给的值求出从池塘流向河的最大流量。

很明显,这道题目就是求容量网络中的最大流...

代码:

 1 var
 2   c,e,n,m,i,s,t:longint;
 3   ans,inf:int64;
 4   h,d,f,g:array[0..5000]of longint;
 5   ot,cap,ne:array[0..100000]of longint;
 6
 7 procedure addedge(x,y,z:longint);
 8 begin
 9   ot[e]:=y; ne[e]:=g[x]; cap[e]:=z; g[x]:=e; inc(e);
10   ot[e]:=x; ne[e]:=g[y]; cap[e]:=0; g[y]:=e; inc(e);
11 end;
12
13 function min(a,b:int64):int64;
14 begin
15   if a<b then exit(a)
16          else exit(b);
17 end;
18
19 function bfs:boolean;
20 var
21   l,r,x,p:int64;
22 begin
23   for i:=1 to n do d[i]:=n+10;
24   l:=0; r:=1; h[1]:=s; d[s]:=0;
25   while l<r do
26     begin
27       inc(l);
28       p:=g[h[l]];
29       while p<>-1 do
30         begin
31           if (cap[p]<>0)and(d[ot[p]]>d[h[l]]+1) then
32             begin
33               inc(r);
34               h[r]:=ot[p];
35               d[ot[p]]:=d[h[l]]+1;
36             end;
37           p:=ne[p];
38         end;
39     end;
40   exit(d[t]<>n+10);
41 end;
42
43 function dfs(x,flow:int64):int64;
44 var
45   p,tmp:int64;
46 begin
47   if x=t then exit(flow);
48   p:=f[x]; dfs:=0;
49   while (p<>-1)and(dfs<flow) do
50     begin
51       if (cap[p]<>0)and(d[ot[p]]=d[x]+1) then
52         begin
53           tmp:=dfs(ot[p],min(flow-dfs,cap[p]));
54           dec(cap[p],tmp);
55           inc(cap[p xor 1],tmp);
56           inc(dfs,tmp);
57         end;
58       p:=ne[p];
59     end;
60   f[x]:=p;
61 end;
62
63 begin
64   inf:=high(int64);
65   while not eof do begin
66   readln(m,n);
67   e:=0;
68   fillchar(g,sizeof(g),255);
69   for i:=1 to m do
70     begin
71       readln(s,t,c);
72       addedge(s,t,c);
73     end;
74   s:=1; t:=n; ans:=0;
75   while bfs do
76     begin
77       for i:=1 to n do
78         f[i]:=g[i];
79       inc(ans,dfs(s,inf));
80     end;
81   writeln(ans); end;
82 end.

时间: 2024-10-13 12:25:28

POJ 1273 -Drainage Ditches的相关文章

POJ 1273 Drainage Ditches(网络流 最大流)

Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 55893   Accepted: 21449 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

POJ 1273 Drainage Ditches (网络最大流)

http://poj.org/problem?id=1273 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 55235   Accepted: 21104 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means

POJ 1273 Drainage Ditches 最大流

很裸的最大流问题,不过注意会有重边,o(╯□╰)o,被阴了WA了一发 还有就是要用long long #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include

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

POJ 1273 Drainage Ditches(初识网络流)

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

hdu 1532 poj 1273 Drainage Ditches (最大流)

Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 55276   Accepted: 21122 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

POJ 1273 Drainage Ditches(我的EK算法模板)

题意:给你n条边,目标位置t:接下来是每条边,包括起点,终点,容量: 感想:第一道最大流的代码,这道题是我更深地理解了Ek算法,不过这道题有个超坑的情况,那就是出现重边的情况==! 思路:EK算法 AC代码: #include<stdio.h> #include<string.h> #include<algorithm> #include<queue> using namespace std; #define INF 100000000 #define N

poj 1273 Drainage Ditches(最大流)

http://poj.org/problem?id=1273 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 62708   Accepted: 24150 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means

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

题目链接:http://poj.org/problem?id=1273 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