Pagini recente » Cod sursa (job #1868501) | Cod sursa (job #2584922) | Cod sursa (job #1086601) | Cod sursa (job #2763408) | Cod sursa (job #598995)
Cod sursa(job #598995)
program _disjoint;
type
_struct = ^_dyn;
_dyn = record
urm : _struct;
x : longword;
end;
_vector1 = array[1..100000] of longword;
_vector2 = array[1..100000] of _struct;
var
u ,h : _vector1;
l : _vector2;
n : longword;
procedure _init;
var
i : longword;
begin
for i := 1 to n do
begin
u[i] := i;
h[i] := 1;
new(l[i]);
l[i]^.x := i;
l[i]^.urm := nil;
end;
end;
procedure _put(x ,y : longword);
var
p : _struct;
begin
h[y] := h[y] + h[x];
while (h[x] > 0) do
begin
h[x] := h[x] - 1;
p := l[x];
l[x] := l[x]^.urm;
p^.urm := l[y];
l[y] := p;
u[p^.x] := u[y];
end;
end;
procedure _main;
var
f ,f0 : text;
i ,m ,x ,y : longword;
cod : byte;
begin
assign(f,'disjoint.in'); reset(f);
assign(f0,'disjoint.out'); rewrite(f0);
readln(f, n, m);
_init;
for i := 1 to m do
begin
readln(f, cod, x, y);
if cod = 1 then
begin
if u[x] <> u[y] then
if h[x] < h[y] then _put(u[x], u[y]) else _put(u[y], u[x]);
end else
begin
if u[x] = u[y] then write(f0,'DA',#10) else
write(f0,'NU',#10);
end;
end;
close(f);
close(f0);
end;
begin
_main;
end.