Cod sursa(job #2869682)

Utilizator the_horoHorodniceanu Andrei the_horo Data 11 martie 2022 19:11:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <array>
#include <cstdint>
#include <fstream>


using u32 = uint32_t;

constexpr size_t MAX_VALUES = 100000;


std::array<size_t, MAX_VALUES> jumpback;

size_t root (size_t index) {
    if (index != jumpback[index])
        jumpback[index] = root(jumpback[index]);
    return jumpback[index];
}

void combine (size_t a, size_t b) {
    jumpback[root(a)] = root(b);
}


int main () {
    std::ifstream in("disjoint.in");
    std::ofstream out("disjoint.out");

    size_t valueCount;
    u32 queryCount;
    in >> valueCount >> queryCount;

    for (size_t i = 0; i != valueCount; ++ i)
        jumpback[i] = i;

    for (u32 i = 0; i != queryCount; ++ i) {
        u32 type;
        size_t a, b;
        in >> type >> a >> b;
        -- a, -- b;

        if (type == 1) {
            combine(a, b);
        } else if (type == 2) {
            if (root(a) == root(b))
                out << "DA\n";
            else
                out << "NU\n";
        }
    }
}