Cod sursa(job #557901)

Utilizator FLORINSTELISTUOprea Valeriu-Florin FLORINSTELISTU Data 16 martie 2011 22:44:31
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.44 kb
program cuplaj;
type nod=^graf;
      graf=record
        inf:longint;
        urm:nod;
         end;
var  a:array[0..10000]of nod;q:nod;
     v:array[0..10000]of boolean;
     l,r:array[0..10000]of longint;
     f,g:text;n,i,m,e,ok,nr:longint;
procedure citire;
var x,y:longint;
begin
      readln(f,n,m,e);
       for i:=1 to e do begin
        readln(f,x,y);
        new(q);
        q^.inf:=y;
        q^.urm:=a[x];
        a[x]:=q;
          end;
       end;
function cauta(x:longint):boolean;
var q:nod;
begin
       cauta:=false;
      if v[x] then cauta:=false
              else begin
       v[x]:=true;
        q:=a[x];
           while q<>nil do begin
            if (r[q^.inf]=0)or(cauta(r[q^.inf])) then begin
             l[x]:=q^.inf;
             r[q^.inf]:=x;
             cauta:=true;
              break;
             end;
              q:=q^.urm;
           end;
        end;
       end;

begin
    assign(f,'cuplaj.in');reset(f);
    assign(g,'cuplaj.out');rewrite(g);
    citire;
     ok:=1;
      while ok<>0 do begin
       ok:=0;
        for i:=0 to n do v[i]:=false;
         for i:=1 to n do
           if l[i]=0 then
             if cauta(i) then begin
              inc(nr);
              ok:=1;
              end;
           end;
             writeln(g,nr);
            for i:=1 to n do
             if l[i]<>0 then writeln(g,i,' ',l[i]);
            close(f);close(g);
             end.