Pagini recente » Cod sursa (job #752692) | Cod sursa (job #781395) | Cod sursa (job #660727) | Cod sursa (job #2155295) | Cod sursa (job #300814)
Cod sursa(job #300814)
program flux;
type capacitate = record
max,can:longint;
end;
lista = ^articol;
articol = record
nr:longint;
u:lista;
c:capacitate;
end;
var d,a,p:array [1..1000] of lista;
g:array [0..1000] of longint;
fl,min,szd,sursa,destinatie,i,n,m,x,y,c:longint;
done:boolean;
procedure df(nod:longint);
var i:longint;
begin
if nod = destinatie then
begin
done:=true;
end;
for i:=1 to g[nod] do
begin
if done then
begin
a[nod]:=p[nod];
exit;
end;
if a[nod]^.c.max-a[nod]^.c.can > 0 then
begin
if a[nod]^.c.max-a[nod]^.c.can<min then
min:=a[nod]^.c.max-a[nod]^.c.can;
inc(szd);
d[szd]:=a[nod];
df(a[nod]^.nr);
end;
a[nod]:=a[nod]^.u;
end;
a[nod]:=p[nod];
end;
begin
assign(input,'maxflow.in');
assign(output,'maxflow.out');
reset(input);
rewrite(output);
readln(n,m);
fillchar(g,sizeof(g),0);
sursa:=1;
destinatie:=n;
for i:=1 to n do
begin
new(a[i]);
p[i]:=a[i];
end;
for i:=1 to m do
begin
readln(x,y,c);
a[x]^.nr:=y;
a[x]^.c.max:=c;
a[x]^.c.can:=0;
new(a[x]^.u);
a[x]:=a[x]^.u;
inc(g[x]);
end;
for i:=1 to n do
a[i]:=p[i];
fl:=0;
min:=maxint;
szd:=0;
done:=true;
while done do
begin
done:=false;
df(sursa);
if done then
begin
inc(fl,min);
for i:=1 to szd do
inc(d[i]^.c.can,min);
min:=maxint;
szd:=0;
end;
end;
writeln(fl);
close(input);
close(output);
end.