Cod sursa(job #557278)

Utilizator FLORINSTELISTUOprea Valeriu-Florin FLORINSTELISTU Data 16 martie 2011 15:48:44
Problema Cuplaj maxim in graf bipartit Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.9 kb
program cuplaj;
type nod=^graf;
       graf=record
         inf:longint;
         urm:nod;
         end;
var s,f,c:array[0..1000]of longint;
    v:array[0..10000]of nod;p:nod;
    i,j,x,y,n,k,m:longint; fin,fout:text;
procedure adauga(x,y:longint);
begin
     new(p);
     p^.inf:=y;
     p^.urm:=v[x];
     v[x]:=p;
       end;
function cauta(n:longint):boolean;
var k:nod;
begin
         cauta:=false;
      if f[n]<>0 then
        cauta:=false
                 else begin
                 f[n]:=1;
                 new(k);
                 k:=v[n];
             while k<>nil do begin
               if c[k^.inf]=0 then begin
                 c[k^.inf]:=n;
                 s[n]:=k^.inf;
                 cauta:=true;
                 break;
                 end;
              k:=k^.urm;
             end;
                  k:=v[n];
            while k<>nil do begin
             if cauta(c[k^.inf]) then begin
               c[k^.inf]:=n;
               s[n]:=k^.inf;
               cauta:=true;
               break;
                end;
              k:=k^.urm;
             end;
         end;
      end;
procedure solve;
var ok:boolean;nr:longint;
begin
        ok:=true;nr:=0;
         while ok do begin
           ok:=false;
          for i:=1 to n do f[i]:=0;
            for i:=1 to n do
              if s[i]=0 then
                if cauta(i) then begin
                  inc(nr);
                  ok:=true;
                 end;
             end;
         writeln(fout,nr);
          for i:=1 to n do
            if s[i]<>0 then writeln(fout,i,' ',s[i]);
end;
begin
      assign(fin,'cuplaj.in');reset(fin);
      assign(fout,'cuplaj.out');rewrite(fout);
         readln(fin,n,m,k);
          for i:=0 to k-1 do begin
           readln(fin,x,y);
           adauga(x,y);
            end;
          solve;
             close(fin);close(fout);
         end.