Cod sursa(job #228352)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 6 decembrie 2008 23:38:34
Problema Paduri de multimi disjuncte Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 0.85 kb
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.