Cod sursa(job #555900)

Utilizator FLORINSTELISTUOprea Valeriu-Florin FLORINSTELISTU Data 15 martie 2011 20:38:33
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.8 kb
program cuplaj;
type nod=^graf;
       graf=record
         inf:longint;
         urm:nod;
         end;
var s,fl,c1:array[0..10000]of longint;
    v:array[0..1000]of nod;p:nod;
    i,j,x,y,n,m,k:longint; f,g: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
      if fl[n]<>0 then
        cauta:=false
                  else begin
        fl[n]:=1;
        new(k);
         k:=v[n];
          while k<>nil do begin
           if c1[k^.inf]=0 then begin
             c1[k^.inf]:=n;
             s[n]:=k^.inf;
             cauta:=true;
             break;
              end;
              k:=k^.urm;
             end;
          k:=v[n];
            while k<>nil do begin
           if c1[k^.inf]<>0 then begin
             c1[k^.inf]:=n;
             s[n]:=k^.inf;
             cauta:=true;
             break;
              end;
              k:=k^.urm;
             end;
           cauta:=false;
          end;
         end;
procedure solve;
var nr:integer;da:boolean;
begin
        da:=true;
         while da do begin
          da:=false;
           for i:=1 to n do fl[i]:=0;
            for i:=1 to n do
             if s[i]=0 then
              if cauta(i) then begin
               inc(nr);
               da:=true;
              end;
             end;
           writeln(g,nr);
            for i:=1 to n do
             if s[i]<>0 then writeln(g,i,' ',s[i]);
end;
begin
      assign(f,'cuplaj.in');reset(f);
      assign(g,'cuplaj.out');rewrite(g);
         readln(f,n,m,k);
          for i:=0 to k-1 do begin
           readln(f,x,y);
           adauga(x,y);
            end;
           solve;
             close(f);close(g);
         end.