Cod sursa(job #300798)

Utilizator SprzlAbcdefg Sprzl Data 7 aprilie 2009 18:06:57
Problema Flux maxim Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 2.13 kb
   1. program flux;  
   2. type capacitate = record  
   3.                     max,can:word;  
   4.                   end;  
   5.      lista = ^articol;  
   6.      articol = record  
   7.                  nr:integer;  
   8.                  u:lista;  
   9.                  c:capacitate;  
  10.                end;  
  11. var a,p:array [1..1000] of lista;  
  12.     parinte,cap,g:array [0..1000] of word;  
  13.     aux,sursa,destinatie,i,j,n,m,x,y,c:word;  
  14.     saturat:array [1..1000] of boolean;  
  15.   
  16. function min(x,y:word):word;  
  17. begin  
  18.   min:=x;  
  19.   if y<x then  
  20.     min:=y;  
  21. end;  
  22.   
  23.   
  24. procedure df(nod,tata:word);  
  25. var i:word;  
  26. begin  
  27.   for i:=1 to g[nod] do  
  28.   begin  
  29.     if a[nod]^.c.can<>a[nod]^.c.max then  
  30.     begin  
  31.       aux:=min(cap[nod],a[nod]^.c.max-a[nod]^.c.can);  
  32.       inc(a[nod]^.c.can,aux);  
  33.       inc(cap[a[nod]^.nr],aux);  
  34.       dec(cap[nod],aux);  
  35.       df(a[nod]^.nr,nod);  
  36.     end;  
  37.     a[nod]:=a[nod]^.u;  
  38.   end;  
  39.   a[nod]:=p[nod];  
  40. end;  
  41.   
  42.   
  43. begin  
  44.   assign(input,'maxflow.in');  
  45.   assign(output,'maxflow.out');  
  46.   reset(input);  
  47.   rewrite(output);  
  48.   
  49.   readln(n,m);  
  50.   fillchar(g,sizeof(g),0);  
  51.   readln(sursa,destinatie);  
  52.   
  53.   for i:=1 to n do  
  54.   begin  
  55.     new(a[i]);  
  56.     p[i]:=a[i];  
  57.   end;  
  58.   
  59.   for i:=1 to m do  
  60.   begin  
  61.     readln(x,y,c);  
  62.     a[x]^.nr:=y;  
  63.     a[x]^.c.max:=c;  
  64.     a[x]^.c.can:=0;  
  65.     new(a[x]^.u);  
  66.     a[x]:=a[x]^.u;  
  67.     inc(g[x]);  
  68.   end;  
  69.   
  70.   for i:=1 to n do  
  71.     a[i]:=p[i];  
  72.   
  73.   parinte[sursa]:=0;  
  74.   fillchar(saturat,sizeof(saturat),false);  
  75.   cap[sursa]:=maxint;  
  76.   df(sursa,0);  
  77.   
  78.   writeln(cap[destinatie]);  
  79.   close(input);  
  80.   close(output);  
  81. end.