Cod sursa(job #2967407)

Utilizator Zamolxis25Sebastian Gradinaru Zamolxis25 Data 19 ianuarie 2023 16:25:30
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
// Algoritm disjoint, uniune dupa rang
// Complexitate : O(n log* n)
#include <vector>
#include <bitset>
#include <fstream>

using namespace std;

const int N = 1e5 + 1;

int t[N], rang[N];

void Union(int x, int y) {
    if (rang[x] > rang[y]){
        t[y] = x;
    } else {
        t[x] = y;
        if (rang[x] == rang[y]) rang[y]++;
    }
}

int Find(int x) {
    if (t[x] == 0)
        return x;
    int y = Find(t[x]);
    t[x] = y;
    return y;
}

int main() {
    int n, queries;
    ifstream fin ("disjoint.in");
    ofstream fout ("disjoint.out");
    fin >> n >> queries;
    for(int i = 1; i <= queries; i++)
        int op, x, y;
        fin >> op >> x >> y;
        x = Find(x);
        y = Find(y);
        if (op == 1)
            Union(x, y);
        else (x == y) ? fout << "DA\n" : fout << "NU\n";
    }
    fin.close();
    fout.close();
}