Cod sursa(job #3267077)

Utilizator BuruianaRaresAndreiBuruiana Rares Andrei BuruianaRaresAndrei Data 11 ianuarie 2025 09:20:34
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

int parent[100005], sz[100005];

void make_set(int crt) {
    parent[crt] = crt;
    sz[crt] = 1;
}

int find_parent(int crt) {
    if(crt == parent[crt])
        return crt;
    return parent[crt] = find_parent(parent[crt]);
}

void unite(int a, int b) {
    a = find_parent(a);
    b = find_parent(b);
    if(a == b)
        return;
    if(sz[a] < sz[b])
        swap(a, b);
    parent[b] = a;
    sz[a] += sz[b];
}

int main() {
    int n, m; in >> n >> m;
    for(int i = 1; i <= n; i++)
        make_set(i);
    for(int i = 1; i <= m; i++) {
        int cerinta, a, b; in >> cerinta >> a >> b;
        if(cerinta == 1) {
            unite(a, b);
        }
        else {
            if(find_parent(a) == find_parent(b)) {
                out << "DA\n";
            }
            else {
                out << "NU\n";
            }
        }
    }
    return 0;
}