Cod sursa(job #381563)

Utilizator cristinabCristina Brinza cristinab Data 10 ianuarie 2010 22:23:13
Problema Paduri de multimi disjuncte Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.03 kb
{paduri de multimi disjuncte}

var h,tata:array[1..100001] of longint;
    n,m:longint;

procedure reuniune(x,y:longint);
begin
if h[x]>h[y] then tata[y]:=x
             else tata[x]:=y;
if h[x]=h[y] then inc(h[y]);
end;

function multime(x:longint):longint;
var y,rad,t:longint;
begin
rad:=x;
while tata[rad]<>rad do rad:=tata[rad];
multime:=rad;
y:=x;
while tata[y]<>y do
      begin
      t:=tata[y];
      tata[y]:=rad;
      y:=t;
      end;
end;

procedure citire;
var cod:byte;
    x,y,i,im,jm:longint;
begin
assign(input,'disjoint.in'); reset(input);
assign(output,'disjoint.out'); rewrite(output);
readln(n,m);
for i:=1 to n do
    begin
    tata[i]:=i;
    h[i]:=1;
    end;
for i:=1 to m do
    begin
    readln(cod,x,y);
    im:=multime(x);
    jm:=multime(y);
    if cod=1 then
       begin
       if im<>jm then reuniune(im,jm)
       end
    else if im<>jm then writeln('NU')
                   else writeln('DA');
    end;
close(input);
close(output);
end;

begin
citire;
end.