Cod sursa(job #3322633)

Utilizator ONLYGODYBochis Andrei ONLYGODY Data 15 noiembrie 2025 09:38:12
Problema Paduri de multimi disjuncte Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 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);

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 = sets[a], sb = sets[b];
    const int s = sa;
    if(sa == sb)
        return;

    for (int i = 1; i <= n; ++i) {

        if(sets[i] == sa || sets[i] == sb)
            sets[i] = s;
    }
}

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

    if(sets[a] == sets[b]) fo << "DA";
    else fo << "NU";

    fo << nl;
}