Cod sursa(job #3139657)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 30 iunie 2023 16:55:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
#define for_auto(v) for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
#define for_rauto(v) for(vector<int>::reverse_iterator it = v.rbegin(); it != v.rend(); it++)

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, q, i, m[100002];
int op, x, y;

static inline int gaseste(int p) {
    if(m[p] == p) return p;
    else {
        m[p] = gaseste(m[p]);
        return m[p];
    }
}

static inline void uneste(int x, int y) {
    int a = gaseste(x);
    int b = gaseste(y);
    m[a] = b;
}

int main() {
    fin >> n >> q;
    for(i = 1; i <= n; i++) m[i] = i;

    while(q--) {
        fin >> op >> x >> y;
        if(op == 1) uneste(x, y);
        else {
            if(gaseste(x) == gaseste(y)) fout << "DA\n";
            else fout << "NU\n";
        }
    }

    return 0;
}