Pagini recente » Cod sursa (job #345429) | Cod sursa (job #2514178) | Cod sursa (job #1842442) | Cod sursa (job #2373058) | Cod sursa (job #775164)
Cod sursa(job #775164)
Program maxflow;
type lista=^celula;
celula=record
nod,c:longint;
next:lista;
end;
var graf:array [1..1000] of lista;
v:lista;
viz:array [1..1000] of boolean;
n,m,i,flux,min,x,y,c:longint;
ok:boolean;
fi,fo:text;
procedure dfs(nod:longint);
var p:lista;
begin
if nod=n then begin flux:=flux+min; ok:=true; end
else begin
p:=graf[nod]; viz[nod]:=true;
while p<>nil do begin
if (viz[p^.nod]=false) and (ok=false) and (p^.c>0) then begin
if p^.c<min then min:=p^.c;
dfs(p^.nod);
if p^.c>min then begin
p^.c:=p^.c-min;
new(v); v^.nod:=nod;
v^.c:=min; v^.next:=graf[p^.nod];
end
else p^.c:=0;
end;
p:=p^.next;
end;
end;
end;
begin
assign(fi,'maxflow.in');
assign(fo,'maxflow.out');
reset(fi); rewrite(fo); readln(fi,n,m);
for i:=1 to m do begin
readln(fi,x,y,c);
new(v); v^.nod:=y; v^.c:=c; v^.next:=graf[x];
graf[x]:=v;
end;
ok:=true;
while ok do begin
ok:=false; min:=10000000;
dfs(1); fillchar(viz,sizeof(viz),0);
end;
write(fo,flux);
close(fo);
end.