Cod sursa(job #3322635)

Utilizator ONLYGODYBochis Andrei ONLYGODY Data 15 noiembrie 2025 09:47:14
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>
#define ll long
// #define fi cin
// #define fo cout
#define nl '\n'
#define sp ' '
using namespace std;

string FILENAME = "disjoint";
fstream fi(FILENAME + ".in", ios::in);
fstream fo(FILENAME + ".out", ios::out);

void solve();
void reunite(int, int, int);
void sameSet(int, int);
int getSet(int);

vector<int> sets;

int main() {

    solve();
    return 0;
}

void solve() {

    int n, m;
    fi >> n >> m;
    sets.resize(n + 1);

    for (int i = 0; i < m; ++i) {

        int a, b, c;
        fi >> a >> b >> c;
        if (sets[c] == 0) sets[c] = c;
        if (sets[b] == 0) sets[b] = b;
        if(a == 1) {

            reunite(b, c, n);
        }
        else {
            sameSet(b, c);
        }
    }
}

void reunite(const int a, const int b, const int n) {

    const int sa = getSet(a), sb = getSet(b);
    const int s = sa;
    if(sa == sb)
        return;

    sets[sets[b]] = sa;
}

void sameSet(const int a, const int b) {

    if(getSet(a) == getSet(b)) fo << "DA";
    else fo << "NU";

    fo << nl;
}

int getSet(const int a) {

    if(sets[a] == a)
        return a;
    else
        return sets[a] = getSet(sets[a]);
}