Pagini recente » Cod sursa (job #818687) | Cod sursa (job #300529) | Cod sursa (job #90981) | Cod sursa (job #2341865) | Cod sursa (job #300677)
Cod sursa(job #300677)
program flux;
type capacitate = record
max,can:word;
end;
lista = ^articol;
articol = record
nr:integer;
u:lista;
c:capacitate;
end;
var a,p:array [1..1000] of lista;
parinte,cap,g:array [0..1000] of word;
aux,sursa,destinatie,i,j,n,m,x,y,c:word;
saturat:array [1..1000] of boolean;
function min(x,y:word):word;
begin
min:=x;
if y<x then
min:=y;
end;
procedure df(nod,tata:word);
var i:word;
begin
for i:=1 to g[nod] do
begin
if a[nod]^.c.can<>a[nod]^.c.max then
begin
aux:=min(cap[nod],a[nod]^.c.max-a[nod]^.c.can);
inc(a[nod]^.c.can,aux);
inc(cap[a[nod]^.nr],aux);
dec(cap[nod],aux);
df(a[nod]^.nr,nod);
end;
a[nod]:=a[nod]^.u;
end;
a[nod]:=p[nod];
end;
begin
assign(input,'flux.in');
assign(output,'flux.out');
reset(input);
rewrite(output);
readln(n,m);
fillchar(g,sizeof(g),0);
readln(sursa,destinatie);
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];
parinte[sursa]:=0;
fillchar(saturat,sizeof(saturat),false);
cap[sursa]:=maxint;
df(sursa,0);
writeln(cap[destinatie]);
close(input);
close(output);
end.