Cod sursa(job #3372946)

Utilizator bajuuuuBajenaru Mihai Catalin Ionut bajuuuu Data 5 noiembrie 2026 17:22:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int MAXN = 100005;
int tata[MAXN], rang[MAXN];
int root(int x) {
    if (tata[x] == x) return x;
    return tata[x] = root(tata[x]);
}
int main() {
    int n, m, tip, x, y;
    in >> n >> m;
    for (int i = 1; i <= n; i++) {
        tata[i] = i;
    }
    while (m--) {
        in >> tip >> x >> y;
        if (tip == 1) {
            int rx = root(x);
            int ry = root(y);
            if (rx != ry) {
                if (rang[rx] < rang[ry]) tata[rx] = ry;
                else if (rang[rx] > rang[ry]) tata[ry] = rx;
                else {
                    tata[ry] = rx;
                    rang[rx]++;
                }
            }
        } else {
            if (root(x) == root(y)) out << "DA\n";
            else out << "NU\n";
        }
    }
    return 0;
}