Cod sursa(job #381554)

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

var h,tata:array[1..100000] 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]<>0 do rad:=tata[rad];
y:=x;
while y<>rad 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]:=0;
    h[i]:=1;
    end;
for i:=1 to m do
    begin
    readln(cod,x,y);
    if cod=1 then reuniune(x,y)
    else begin
         im:=multime(x);
         jm:=multime(y);
         if im<>jm then writeln('NU')
                   else writeln('DA');
         end;
    end;
close(input);
close(output);
end;

begin
citire;
end.