Cod sursa(job #1073759)

Utilizator casianos1996Marc Casian Nicolae casianos1996 Data 6 ianuarie 2014 19:50:14
Problema Paduri de multimi disjuncte Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 0.94 kb
program disjoint;
var tata,rg: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 tata[x]<>x do
   x:=tata[x];
  while tata[aux]<>aux do
   begin
    t:=tata[aux];
    tata[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
   tata[i]:=i;
   rg[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 rg[w]>rg[q] then
         tata[q]:=w
        else
         tata[w]:=q;
        if rg[w]=rg[q] then
         inc(rg[q]);
       end;
     2: begin
         if q=w then
          writeln(g,'DA')
         else
          writeln(g,'NU');
        end;

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