Cod sursa(job #1402180)

Utilizator casianos1996Marc Casian Nicolae casianos1996 Data 26 martie 2015 13:17:10
Problema Flux maxim Scor 60
Compilator fpc Status done
Runda Arhiva educationala Marime 1.44 kb
program flux_maxim;
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);
  fillchar(c,sizeof(c),0);
  fillchar(pre,sizeof(pre),0);
  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.