Cod sursa(job #267244)

Utilizator valytgjiu91stancu vlad valytgjiu91 Data 26 februarie 2009 22:45:57
Problema Flux maxim Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.46 kb
const nmax=1024;
const mn=10000;
const inf=1000;
var f,c,g:array[1..nmax,1..nmax] of integer;
a,q,viz,m:array[0..mn] of integer;
s,viz2,x,y,d:array[0..mn] of integer;
h1,h:text;
flux,cost,i,n,p:integer;

 function  min(x,y:integer):integer;
begin
  if x>y then min:=y
  else min:=x;
end;

function bfs:boolean;
var st,dr,x,y,i:integer;
begin
  st:=1;
  dr:=1;
  q[st]:=1;
  viz[1]:=-1;
  m[1]:=inf;
  for i:=2 to n do
     viz[i]:=0;
  while st<=dr do
     begin
     x:=q[st];
     for i:=1 to d[x] do
        begin
          y:=g[x,i];
          if (viz[y]=0) and(f[x,y]<c[x,y]) then
             begin
             viz[y]:=x;
             m[y]:=min(m[x],c[x,y]-f[x,y]);
             dr:=dr+1;
             q[dr]:=y;
             end;
          st:=st+1
        end;
     end;
  if  viz[n]<>0  then bfs:=true
       else bfs:=false ;
end;

   begin
   assign(h,'maxflow.in');
   reset(h);
   assign(h1,'maxflow.out');
   rewrite(h1);
   readln(h,n,p);
    for i:=1 to p do
 begin
 readln(h,x[i],y[i],cost);
 d[x[i]]:=d[x[i]]+1;
 d[y[i]]:=d[y[i]]+1;
 g[x[i],d[x[i]]]:=y[i];
 g[y[i],d[y[i]]]:=x[i];
 c[x[i],y[i]]:=cost;
 c[y[i],x[i]]:=cost;
 end;

      while bfs do
    begin
     i:=n;
     while i>1 do
        begin
          f[viz[i],i]:=f[viz[i],i]+m[n];
          f[i,viz[i]]:=f[i,viz[i]]-m[n];
          i:=viz[i];
          flux:=flux+m[n];
        end;
     end;

      writeln(h1,flux);
      close(h1);
   end.