Cod sursa(job #3296555)

Utilizator sasha-vovcSasha Vovcenco sasha-vovc Data 13 mai 2025 18:03:36
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

int parent[100001];
vector<int> rang(100001, 1);

int root(const int node) {
    if (parent[node] == node) {
        return node;
    }
    return parent[node] = root(parent[node]);
}
void join(int a, int b) {
    int root_a = root(a);
    int root_b = root(b);
    if (root_a == root_b) {
        return;
    }
    if (rang[a] < rang[b]){
        swap(a, b);
    }
    parent[b] = a;
    if (rang[a] == rang[b]) {
        rang[a]++;
    }
}

int main() {
    ifstream input("disjoint.in");
    ofstream output("disjoint.out");
    int N, M;
    input >> N >> M;
    for (int q = 1; q <= N; q++) {
        parent[q] = q;
    }
    for (int q = 0; q < M; q++) {
        int type;
        int x, y;
        input >> type >> x >> y;
        if (type == 1) {
            join(parent[x], parent[y]);
        } else {
            if (root(x) == root(y)) {
                output << "DA\n";
            } else {
                output << "NU\n";
            }
        }
    }

    return 0;
}