Pagini recente » Cod sursa (job #129429) | Cod sursa (job #1045943) | Cod sursa (job #472002) | Cod sursa (job #2030769) | Cod sursa (job #303714)
Cod sursa(job #303714)
var v:array[1..1000,1..1000]of longint;
tata:array[1..1001]of integer;
f:text;
nod,i,s,d,n,m:integer;
c,min,flux_max:longint;
ok:boolean;
procedure citire;
begin
assign(f,'maxflow.in');reset(f);
read(f,n,m);
for i:=1 to m do begin
read(f,s,d,c);
v[s,d]:=c;
end;
close(f);
end;
procedure parcurgere; {in latime}
var viz:array[1..1001]of boolean;
c:array[1..1001]of integer;
p,u:integer;
begin
fillchar(viz,sizeof(viz),false);
p:=1; u:=1; c[p]:=1;
while p<=u do begin
nod:=c[p];
for i:=1 to n do
if (not viz[i]) and (v[nod,i]>0) then
begin
viz[i]:=true;
inc(u);
c[u]:=i;
tata[i]:=nod;
end;
inc(p);
end;
if viz[d] then ok:=true
else ok:=false;
end;
procedure prg;
begin
parcurgere;
while ok do begin
for i:=1 to n do
if v[i,n]>0 then begin
min:=v[i,n];
nod:=i;
while nod<>s do begin
if min>v[tata[nod],nod] then min:=v[tata[nod],nod];
nod:=tata[nod];
end;
nod:=i;
while nod<>s do begin
v[tata[nod],nod]:=v[tata[nod],nod]-min;
{ v[nod,tata[nod]]:=v[nod,tata[nod]]+min; }
nod:=tata[nod];
end;
v[i,n]:=v[i,n]-min;
{ v[n,i]:=v[n,i]+min; }
flux_max:=flux_max+min;
end;
parcurgere;
end;
end;
procedure afisare;
begin
assign(f,'maxflow.out');rewrite(f);
write(f,flux_max);
close(f);
end;
begin
citire;
s:=1; d:=n; {s=sursa, d=dest}
prg;
afisare;
end.