Cod sursa(job #3357996)

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

const int NMAX = 100005;

int tata[NMAX], rang[NMAX];

int find(int nod) {
    if (tata[nod] == nod) return nod;
    int aux = find(tata[nod]);
    tata[nod] = aux; // compresia drumurilor
    return aux;
}

void reuneste(int x, int y) {
    int radacina_x = find(x);
    int radacina_y = find(y);

    if (rang[radacina_x] > rang[radacina_y]) {
        tata[radacina_y] = radacina_x;
    } else {
        tata[radacina_x] = radacina_y;
        if (rang[radacina_x] == rang[radacina_y]) {
            rang[radacina_y]++;
        }
    }
}

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

    int N, M;
    fin >> N >> M;

    for (int i = 1; i <= N; i++) {
        tata[i] = i;
        rang[i] = 0;
    }

    for (int i = 1; i <= M; i++) {
        int cod, x, y;
        fin >> cod >> x >> y;

        if (cod == 1) {
            reuneste(x, y);
        } else {
            if (find(x) == find(y)) {
                fout << "DA\n";
            } else {
                fout << "NU\n";
            }
        }
    }

    fin.close();
    fout.close();

    return 0;
}