Pagini recente » Cod sursa (job #3031527) | Cod sursa (job #525174) | Cod sursa (job #98454) | Cod sursa (job #101417) | Cod sursa (job #1217055)
program flux;
type lista= ^celula;
celula=record
info:longint;
next:lista;
end;
var n,m,i,x,y,z,min,f:longint;
a:array [1..1000] of lista;
r,coada,v,q:lista;
c:array[1..1000,1..1000] of longint;
from:array[1..1000]of longint;
vis:array[1..1000] of byte;
ok:boolean;
begin
assign(input,'maxflow.in');
reset(input);
assign(output,'maxflow.out');
rewrite(output);
readln(n,m);
for i:=1 to m do
begin
readln(x,y,z);
new(r);
r^.info:=y;
r^.next:=a[x];
a[x]:=r;
c[x,y]:=z;
end;
ok:=true;
while ok do
begin
ok:=false;
for i:=1 to n do begin vis[i]:=0;from[i]:=0; end;
new(coada); vis[1]:=1;
coada^.info:=1;v:=coada;
while coada<>nil do
begin
q:=a[coada^.info];
while q<>nil do
begin
if c[coada^.info,q^.info]>0 then
if vis[q^.info]=0 then
begin
from[q^.info]:=coada^.info;
if q^.info=n then
begin
ok:=true;
x:=n; min:=1000000000;
while from[x]<>0 do
begin
if c[from[x],x]<min then min:=c[from[x],x];
x:=from[x];
end;
x:=n;
f:=f+min;
while from[x]<>0 do
begin
c[from[x],x]:=c[from[x],x]-min;
c[x,from[x]]:=c[x,from[x]]+min;
x:=from[x];
end;
end else
begin
vis[q^.info]:=1;
new(r);
r^.info:=q^.info;
v^.next:=r;
v:=r;
end;
end;
q:=q^.next;
end;
coada:=coada^.next;
end;
end;
writeln(f);
close(output);
end.