Pagini recente » Cod sursa (job #1652880) | Cod sursa (job #638772) | winners31 | Cod sursa (job #1582406) | Cod sursa (job #306661)
Cod sursa(job #306661)
Program Disjoint;
var intrare,iesire : text;
t,h : array[1..100000] of longint;
n,m : longint;
procedure deschideFisiere;
begin
assign(intrare,'disjoint.in');
reset(intrare);
assign(iesire,'disjoint.out');
rewrite(iesire);
end;
function radMultime(k : longint) : longint;
var r,i,j : longint;
begin
r:=k;
while t[r]>0 do r:=t[r];
i:=k;
while t[i]>0 do begin
j:=t[i];
t[i]:=r;
i:=j;
end;
radMultime:=r;
end;
procedure reuneste(k1,k2 : longint);
var r1,r2 : longint;
begin
r1:=radMultime(k1);
r2:=radMultime(k2);
if h[r1]=h[r2] then begin
t[r2]:=r1;
h[r1]:=h[r1]+1;
end
else
if h[r2]<h[r1] then t[r2]:=r1
else t[r1]:=r2;
end;
function raspuns(k1,k2 : longint) : string;
begin
if radMultime(k1)=radMultime(k2) then raspuns:='DA'
else raspuns:='NU';
end;
procedure proceseaza;
var i,x,y : longint;
cod : byte;
begin
readln(intrare,n,m);
for i:=1 to n do begin
t[i]:=0;
h[i]:=0;
end;
for i:=1 to m do begin
readln(intrare,cod,x,y);
if cod=1 then reuneste(x,y)
else writeln(iesire,raspuns(x,y));
end;
end;
procedure inchideFisiere;
begin
close(intrare);
close(iesire);
end;
begin
deschideFisiere;
proceseaza;
inchideFisiere;
end.