Cod sursa(job #775206)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 7 august 2012 15:29:20
Problema Flux maxim Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.44 kb
Program maxflow;
 type lista=^celula;
      celula=record
        nod:longint;
        next:lista;
        end;
var graf:array [1..1000] of lista;
    v:lista;
    cost:array [1..1001,1..1001] of longint;
    viz:array [1..1000] of boolean;
    n,m,i,flux,min,x,y,c:longint;
    ok:boolean;
    fi,fo:text;
procedure dfs(nod:longint);
 var p:lista;
begin
 if nod=n then begin flux:=flux+min; ok:=true; end
   else begin
         p:=graf[nod]; viz[nod]:=true;
         while p<>nil do begin
          if (viz[p^.nod]=false) and (ok=false) and (cost[nod,p^.nod]>0) then begin
                                 if cost[nod,p^.nod]<min then min:=cost[nod,p^.nod];
                                 dfs(p^.nod);
                                    cost[nod,p^.nod]:=cost[nod,p^.nod]-min;
                                    cost[p^.nod,nod]:=cost[p^.nod,nod]+min;
                                 end;
           p:=p^.next;
         end;
        end;
end;
begin
 assign(fi,'maxflow.in');
  assign(fo,'maxflow.out');
 reset(fi); rewrite(fo); readln(fi,n,m);
 for i:=1 to m do begin
    readln(fi,x,y,c);
     new(v); v^.nod:=y; v^.next:=graf[x];
      graf[x]:=v; cost[x,y]:=c;
     new(v); v^.nod:=x; v^.next:=graf[y]; graf[y]:=v;
    end;
 ok:=true;
  while ok do begin
           ok:=false; min:=10000000; viz[n]:=true;
            dfs(1); fillchar(viz,sizeof(viz),0);
           end;
  write(fo,flux);
 close(fo);
end.