codevs 草地排水問題 網路流

2021-07-28 13:18:36 字數 2552 閱讀 4924

題目描述 description

農夫約翰知道每一條排水溝每分鐘可以流過的水量,和排水系統的準確布局(起點為水潭而終點為小溪的一張網)。需要注意的是,有些時候從一處到另一處不只有一條排水溝。

根據這些資訊,計算從水潭排水到小溪的最大流量。對於給出的每條排水溝,雨水只能沿著乙個方向流動,注意可能會出現雨水環形流動的情形。

輸入描述 input description

第1行: 兩個用空格分開的整數n (0 <= n <= 200) 和 m (2 <= m <= 200)。n是農夫john已經挖好的排水溝的數量,m是排水溝交叉點的數量。交點1是水潭,交點m是小溪。

第二行到第n+1行: 每行有三個整數,si, ei, 和 ci。si 和 ei (1 <= si, ei <= m) 指明排水溝兩端的交點,雨水從si 流向ei。ci (0 <= ci <= 10,000,000)是這條排水溝的最大容量。

輸出描述 output description

輸出乙個整數,即排水的最大流量。

樣例輸入 sample input

5 4

1 2 40

1 4 20

2 4 20

2 3 30

3 4 10

樣例輸出 sample output 50

分析:模版的dinic演算法,找個模版bfsdinic就好了。

**:const

maxn=200;

maxm=400;

inf=100000000;

varv,r,next:array [1..maxm] of longint;

first,now,q,dis:array [1..maxn] of longint;

n,m,x,y,w,i,ans:longint;

procedure addedge(i,x,y,w:longint);

begin

v[i]:=y;

r[i]:=w;

if first[x]<>0 then

next[i]:=first[x];

first[x]:=i;

end;

function check:boolean;

varhead,tail,i,x,y:longint;

begin

for i:=1 to n do

dis[i]:=-1;

head:=0;tail:=1;q[1]:=1;dis[1]:=0;

while head0 do

begin

y:=v[i];

if (r[i]>0) and (dis[y]<0) then

begin

dis[y]:=dis[x]+1;

inc(tail);q[tail]:=y;

if y=n then

exit(true);

end;

i:=next[i];

end;

end;

exit(false);

end;

function try(u,min:longint):longint;

vari,y,mi:longint;

begin

if u=n then

exit(min);

i:=now[u];

while i<>0 do

begin

y:=v[i];

if (r[i]>0) and (dis[y]=dis[u]+1) then

begin

if r[i]>min then

mi:=min

else

mi:=r[i];

mi:=try(y,mi);

if mi>0 then

begin

dec(r[i],mi);

if i mod 2=1 then

inc(r[i+1],mi)

else

inc(r[i-1],mi);

exit(mi);

end;

end;

i:=next[i];

end;

exit(0);

end;

procedure dinic;

vari:longint;

begin

while check do

for i:=1 to 2*m do

now[i]:=first[i];

end;

begin

readln(m,n);

for i:=1 to m do

begin

readln(x,y,w);

addedge(2*i-1,x,y,w);

addedge(2*i,y,x,0);

end;

dinic;

ans:=0;

i:=first[n];

while i<>0 do

begin

ans:=ans+r[i];

i:=next[i];

end;

writeln(ans);

end.

草地排水 codevs1993 網路流

農夫約翰知道每一條排水溝每分鐘可以流過的水量,和排水系統的準確布局 起點為水潭而終點為小溪的一張網 需要注意的是,有些時候從一處到另一處不只有一條排水溝。根據這些資訊,計算從水潭排水到小溪的最大流量。對於給出的每條排水溝,雨水只能沿著乙個方向流動,注意可能會出現雨水環形流動的情形。第1行 兩個用空格...

草地排水 (網路流)gzoi

農夫john不僅知道每條溝渠每分鐘可以傳輸多少加侖的水,而且知道溝渠的精確布局,將水從池塘中排出,通過複雜的網路注入到每條溝渠和溪流中。給出所有的有關資訊,確定可以從池塘中流出並流入溪流中的水的最大速率。對每個溝渠,水流的方向是唯一的,但水可以迴圈流動。輸入 輸入包含若干測試用例。對於每個測試用例,...

codevs 1993草地排水

農夫約翰知道每一條排水溝每分鐘可以流過的水量,和排水系統的準確布局 起點為水潭而終點為小溪的一張網 需要注意的是,有些時候從一處到另一處不只有一條排水溝。根據這些資訊,計算從水潭排水到小溪的最大流量。對於給出的每條排水溝,雨水只能沿著乙個方向流動,注意可能會出現雨水環形流動的情形。輸入描述 inpu...