Cod sursa(job #3358018)

Utilizator TestLicenta123Test Test TestLicenta123 Data 13 iunie 2026 23:01:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>
using namespace std;

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

const int NMAX = 100001;
int t[NMAX], r[NMAX];

int rad(int x) {
    if (t[x] != x)
        t[x] = rad(t[x]);
    return t[x];
}

void unite(int x, int y) {
    x = rad(x); y = rad(y);
    if (x == y) return;
    if (r[x] < r[y]) t[x] = y;
    else {
        t[y] = x;
        if (r[x] == r[y]) ++r[x];
    }
}

int main() {
    int n, m, op, x, y;
    fin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        t[i] = i; r[i] = 0;
    }
    while (m--) {
        fin >> op >> x >> y;
        if (op == 1) unite(x, y);
        else fout << (rad(x) == rad(y) ? "DA\n" : "NU\n");
    }
    return 0;
}