Cod sursa(job #1402200)

Utilizator casianos1996Marc Casian Nicolae casianos1996 Data 26 martie 2015 13:27:52
Problema Flux maxim Scor 60
Compilator fpc Status done
Runda Arhiva educationala Marime 1.15 kb
var f:text;
    a:array[1..1024,1..1024] of longint;
    n,m,i,b,d,q,z,k,r,j,min,fluxmax:longint;
    c,pre,v:array[1..1024] of integer;
    ver:array[1..1024] of boolean;
function lala:boolean;
begin
fillchar(ver,sizeof(ver),false);
ver[1]:=true;
c[1]:=1;
pre[1]:=0;
z:=1;
k:=1;
while z<=k do
 begin
  for i:=1 to n do
   begin
    if (a[c[z],i]>0) and (ver[i]=false) then
     begin
      pre[i]:=c[z];
      inc(k);
      c[k]:=i;
      ver[i]:=true;
     end;
   end;
  inc(z);
 end;
if ver[n]=true then
 lala:=true
  else
 lala:=false;
end;
begin
assign(f,'maxflow.in');
reset(f);
readln(f,n,m);
for i:=1 to m do
 begin
  readln(f,b,d,q);
  a[b,d]:=q;
 end;
close(f);
while lala do
 begin
  r:=n;
  j:=0;
  while r<>0 do
   begin
    inc(j);
    v[j]:=r;
    r:=pre[r];
   end;
  min:=maxlongint;
  for i:=j downto 2 do
   if a[v[i],v[i-1]]<min then
     min:=a[v[i],v[i-1]];

  for i:=j downto 2 do
   begin
    a[v[i],v[i-1]]:=a[v[i],v[i-1]]-min;
    a[v[i-1],v[i]]:=a[v[i-1],v[i]]+min;
   end;
  fluxmax:=fluxmax+min;
 end;
assign(f,'maxflow.out');
rewrite(f);
write(f,fluxmax);
close(f);
end.