Cod sursa(job #1060931)

Utilizator mariusadamMarius Adam mariusadam Data 18 decembrie 2013 21:51:14
Problema Paduri de multimi disjuncte Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 0.9 kb
program disjoint;
var a,b:array[1..100000] of longint;
    f,g:text;
    tip,n,m,i,x,y,q,w:longint;

function radacina(x:longint):longint;
 var t,aux:longint;
 begin
  aux:=x;
  while a[x]<>x do
   x:=a[x];
  while a[aux]<>aux do begin
   t:=a[aux];
   a[aux]:=x;
   aux:=t;
  end;
  radacina:=x;
 end;

begin
 assign(f,'disjoint.in'); reset(f);
 assign(g,'disjoint.out'); rewrite(g);
 read(f,n);
 for i:=1 to n do
  begin
   a[i]:=i;
   b[i]:=1;
  end;
 read(f,m);
 for i:=1 to m do
  begin
   read(f,tip,x,y);
   q:=radacina(x);
   w:=radacina(y);
   case tip of
    1: begin
        if b[w]>b[q] then
         a[q]:=w
        else
         a[w]:=q;
        if b[w]=b[q] then
         inc(b[q]);
        end;
     2: begin
         if q=w then
          writeln(g,'DA')
         else
          writeln(g,'NU');
        end;

     end;
   end;
 close(f); close(g);
end.