Cod sursa(job #3236069)

Utilizator radubuzas08Buzas Radu radubuzas08 Data 25 iunie 2024 22:35:14
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#define NMAX 1000000
using namespace std;

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

int tata[NMAX + 1], rang[NMAX + 1];

int find(int x) {
    if (tata[x]){
        int k = find(tata[x]);
        tata[x] = k;
        return k;
    }
    return x;
}

void U(int u, int v) {
    u = find(u);
    v = find(v);

    if (rang[u] > rang[v])
        tata[v] = u;
    else {
        tata[u] = v;
        if (rang[u] == rang[v])
            ++rang[u];
    }
}

int main() {
    int m;

    in >> m >> m;

    while (m--) {
        int op, u, v;

        in >> op >> u >> v;
        if (op == 1){
            U(u, v);
        }
        else {
            if (find(u) == find(v)) {
                out << "DA\n";
            }
            else {
                out << "NU\n";
            }
        }
    }


    return 0;
}