poj1273
来源:互联网 发布:大学生网络诈骗感悟 编辑:程序博客网 时间:2024/05/18 03:56
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 41 2 401 4 202 4 202 3 303 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);
q[f]:=u;
if u=vt then exit(true);
end;
tmp:=g[tmp].next;
end;
inc(l);
until l>f;
exit(false);
end;
procedure add(a,b,c:longint);
begin
inc(tot);
g[tot].y:=b;
g[tot].r:=c;
g[tot].next:=h[a];
h[a]:=tot;
g[tot].op:=tot+1;
inc(tot);
g[tot].y:=a;
g[tot].r:=0;
g[tot].next:=h[b];
h[b]:=tot;
g[tot].op:=tot-1;
end;
begin
while not eof do
begin
fillchar(g,sizeof(g),0);
fillchar(h,sizeof(h),$ff);
fillchar(level,sizeof(level),0);
fillchar(q,sizeof(q),0);
readln(n,m);
tot:=0;
ans:=0;
vs:=1;
vt:=m;
for i:=1 to n do
begin
readln(a,b,c);
add(a,b,c);
end;
while bfs do
ans:=ans+dfs(vs,maxlongint);
writeln(ans);
end;
end.
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- poj1273
- POJ1273
- poj1273
- POJ1273
- poj1273 EK
- POJ1273 Drainage Ditches
- POJ1273(最大流)
- poj1273 Drainage Ditches
- 快速排序
- UITextView学习记录
- 黑马程序员--Foundation
- intellij IDEA序列号
- Tomcat搭建文件服务器
- poj1273
- MySQL版本查询以及生成的数据表文件路径
- SQL-T-SQL语句
- 009.BOOL 布尔类型
- vpn报错:OpenVPN for Win32 "All TAP-Win32 adapters on this system are currently in use"
- 牛市不牛 换种新的方式来理财如何?
- 做好外贸电子商务不能只靠PC端,必须与移动端双管齐下
- 【leetcode】67. Add Binary
- centos下的vnc server的使用