Cod sursa(job #2763796)

Utilizator rares89_Dumitriu Rares rares89_ Data 16 iulie 2021 19:13:03
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <unordered_map>

using namespace std;

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

int T[200005], n, M, x, y, c;
unordered_map<int, int> m;

void leaga(int r1, int r2) {
    if(T[r1] > T[r2]) {
        T[r1] = T[r2];
    } else {
        T[r2] = T[r1];
    }
}

int rad(int a) {
    if(a == T[a]) {
        return a;
    } else {
        return T[a] = rad(T[a]);
    }
}

int main() {
    for(int i = 1; i <= 200000; i++) {
        T[i] = i;
    }
    fin >> n >> M;
    for(int i = 1; i <= M; i++) {
        fin >> c >> x >> y;
        if(m[x] == 0) {
            m[x] = m.size();
        }
        if(m[y] == 0) {
            m[y] = m.size();
        }
        x = m[x];
        y = m[y];
        if(c == 1) {
            int r1 = rad(x), r2 = rad(y);
            if(r1 != r2) {
                leaga(r1, r2);
            }
        } else {
            fout << (rad(x) == rad(y) ? "DA\n" : "NU\n");
        }
    }
    fin.close();
    fout.close();
    return 0;
}