Cod sursa(job #3246808)

Utilizator victorzarzuZarzu Victor victorzarzu Data 4 octombrie 2024 15:54:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int n, m;
int t[100005], r[100005];

void init() {
    for(int i = 1;i <= n;++i) {
        t[i] = i;
        r[i] = 1;
    }
}

void unite(const int& x, const int& y) {
    if(r[x] > r[y]) {
        r[x] += r[y];
        t[y] = x;
        return;
    }
    r[y] += r[x];
    t[x] = y;
}

int query(const int& x) {
    if(t[x] == x) {
        return x;
    }

    return t[x] = query(t[x]);
}

void solve() {
    f>>n>>m;
    init();
    int x, y, z;

    for(int i = 1;i <= m;++i) {
        f>>x>>y>>z;
        if(x == 1) {
            unite(query(y), query(z));
            continue;
        }
        if(query(y) == query(z)) {
            g<<"DA\n";
            continue;
        }
        g<<"NU\n";
    }
}

int main() {

    solve();
    return 0;
}