Cod sursa(job #274422)

Utilizator FllorynMitu Florin Danut Flloryn Data 9 martie 2009 18:48:10
Problema Paduri de multimi disjuncte Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 0.94 kb
var a,b:array[1..1000000] 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.