Cod sursa(job #307107)

Utilizator wefgefAndrei Grigorean wefgef Data 23 aprilie 2009 01:37:27
Problema Paduri de multimi disjuncte Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 0.82 kb
program disjoint;
const MAX_N = 100000;
var n, m : integer;
    t : array[1..MAX_N] of integer;
    i, op, a, b : integer;

procedure union(a, b : integer);
begin
    if random(2) = 1 then t[a] := b
    else t[b] := a;
end;

function find(a : integer) : integer;
begin
    if t[a] = a then find := a
    else find := find(t[a]);
end;

// main function starts here
begin
    assign(input, 'disjoint.in'); reset(input);
    assign(output, 'disjoint.out'); rewrite(output);

    read(n, m);
    // initialization
    for i := 1 to n do
        t[i] := i;

    // solve
    for i := 1 to m do
    begin
        read(op, a, b);
        if op = 1 then union(a, b)
        else
            if find(a) = find(b) then
                writeln('DA')
            else
                writeln('NU');
    end;
end.