poj1273
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 61571 | Accepted: 23621 |
Description
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
Output
Sample Input
5 4 1 2 40 1 4 20 2 4 20 2 3 30 3 4 10
Sample Output
50
题意:如今有m个池塘(从1到m開始编号,1为源点,m为汇点),及n条水渠,给出这n条水渠所连接的点和所能流过的最大流量。求从源点到汇点能流过的最大流量。(网络流模板题)
代码:
type
node=record
y,r,next,op:longint;
end;
var
g:array [1..400] of node;
h,level,q:array [1..400] of longint;
i,j,m,n,ans,a,b,c,vs,vt,tot:longint;
function min(x,y:longint):longint;
begin
if x<y then
exit(x);
exit(y);
end;
function dfs(v,a:longint):longint;
var
tmp,u,ans,value,flow:longint;
begin
if (v=vt) or (a=0) then exit(a);
ans:=0;
tmp:=h[v];
while tmp<>-1 do
begin
u:=g[tmp].y;
value:=g[tmp].r;
if level[v]+1=level[u] then
begin
flow:=dfs(u,min(a,value));
if flow<>0 then
begin
g[tmp].r:=g[tmp].r-flow;
g[g[tmp].op].r:=g[g[tmp].op].r+flow;
ans:=ans+flow;
a:=a-flow;
if a=0 then break;
end;
end;
tmp:=g[tmp].next;
end;
exit(ans);
end;
function bfs:boolean;
var
u,tmp,l,f,v:longint;
begin
fillchar(level,sizeof(level),0);
q[1]:=vs;
level[vs]:=1;
l:=1;
f:=1;
repeat
v:=q[l];
tmp:=h[v];
while tmp<>-1 do
begin
u:=g[tmp].y;
if (g[tmp].r<>0) and (level[u]=0) then
begin
level[u]:=level[v]+1;
inc(f);
&