Cod sursa(job #1403202)

Utilizator casianos1996Marc Casian Nicolae casianos1996 Data 27 martie 2015 09:20:17
Problema Flux maxim Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 1.56 kb
program flux_brut;
var     f,g:text;
        maxf,min,pas,k,p,n,m,i,j,c,x,y,s,d:longint;
        a:array[1..1000,1..1000] of longint;
        viz,cd,pred:array[1..1000] of integer;
        v:array[1..5000] of integer;

procedure bfs(nod,mark:integer);
var       p,i,st,sf:longint;
begin
  st:=0; sf:=1; cd[1]:=nod; pred[nod]:=0; viz[nod]:=mark;
  while st<sf do
    begin
      inc(st);
      for i:=1 to n do
        begin
          if a[cd[st],i]>0 then
            if viz[i]<>mark then
              begin
                inc(sf);
                cd[sf]:=i;
                viz[cd[sf]]:=mark;
                pred[cd[sf]]:=cd[st];
              end;
        end;
    end;
end;

function pot(sursa,destinatie,mark:longint):boolean;
begin
  bfs(1,mark);
  if viz[destinatie]=mark then pot:=true
    else pot:=false;
end;

begin
  assign(f,'maxflow.in'); reset(f);
  assign(g,'maxflow.out'); rewrite(g);
  readln(f,n,m);
  maxf:=0;
  for i:=1 to m do
    begin
      readln(f,x,y,c);
      a[x,y]:=c;
    end;
  pas:=1;
  while pot(1,n,pas) do
    begin
      p:=n;
      i:=0;
      min:=maxlongint;
      while p<>0 do
        begin
          inc(i);
          v[i]:=p;
          p:=pred[p];
        end;
      for j:=i downto 2 do
        if a[v[j],v[j-1]]<min then min:=a[v[j],v[j-1]];
      for j:=i downto 2 do
        begin
          a[v[j],v[j-1]]:=a[v[j],v[j-1]]-min;
        //  a[v[j-1],v[j]]:=a[v[j-1],v[j]]+min;
        end;
      inc(pas);
      maxf:=maxf+min;
    end;
  writeln(g,maxf);
  close(f); close(g);
end.