Cod sursa(job #557362)

Utilizator FLORINSTELISTUOprea Valeriu-Florin FLORINSTELISTU Data 16 martie 2011 16:45:12
Problema Cuplaj maxim in graf bipartit Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.92 kb
program cuplaj;
type nod=^graf;
       graf=record
         inf:longint;
         urm:nod;
         end;
var s,f,c:array[0..10010]of longint;
    v:array[0..10001]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 q:nod;
begin
      cauta:=false;
      if f[n]<>0 then begin
        cauta:=false;end
                 else begin
                 f[n]:=1;
                 new(q);
                 q:=v[n];
             while q<>nil do begin
               if c[q^.inf]=0 then begin
                 s[n]:=q^.inf;
                 c[q^.inf]:=n;
                 cauta:=true;
                 break;
                 end;
              q:=q^.urm;
             end;
                  new(q);
                  q:=v[n];
            while q<>nil do begin
             if cauta(c[q^.inf]) then begin
               s[n]:=q^.inf;
               c[q^.inf]:=n;
               cauta:=true;
               break;
                end;
              q:=q^.urm;
             end;
         end;
      end;
procedure solve;
var ok:boolean;nr,rez: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
                  ok:=cauta(i);
             end;
             for i:=1 to n do
              if s[i]<>0 then inc(nr);
             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:=k downto 1 do begin
           read(fin,x,y);
           adauga(x,y);
            end;
          solve;
             close(fin);close(fout);
         end.