Pagini recente » Cod sursa (job #584635) | Cod sursa (job #1947666) | Cod sursa (job #1353542) | Cod sursa (job #2348372) | Cod sursa (job #301178)
Cod sursa(job #301178)
program flux;
type lista = ^articol;
articol = record
nr:longint;
u,b:lista;
c:longint;
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;
viz:array [1..1000] of boolean;
procedure df(nod:longint);
var i:longint;
begin
viz[nod]:=true;
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 not viz[a[nod]^.nr] then
if a[nod]^.c> 0 then
begin
if a[nod]^.c<min then
min:=a[nod]^.c;
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:=c;
inc(g[x]);
new(a[x]^.u);
if x<>y then
begin
a[y]^.c:=0;
a[y]^.nr:=x;
new(a[y]^.u);
a[y]:=a[y]^.u;
a[y]^.b:=a[x];
inc(g[y]);
end;
a[x]^.b:=a[y];
a[x]:=a[x]^.u;
end;
for i:=1 to n do
a[i]:=p[i];
fl:=0;
min:=maxlongint;
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
begin
dec(d[i]^.c,min);
inc(d[i]^.b^.c,min)
end;
min:=maxint;
szd:=0;
fillchar(viz,sizeof(viz),false);
end;
end;
writeln(fl);
close(input);
close(output);
end.