Cod sursa(job #3362163)

Utilizator Zeno1789Zeno Ciuca Zeno1789 Data 3 august 2026 22:21:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream cin ("disjoint.in");
ofstream cout ("disjoint.out");

vector<int> parent;
vector<int> rank_sz;

int find_set(int v) {
    if (v==parent[v]) {
        return v;
    }
    return parent[v]=find_set(parent[v]);
}

void union_sets(int a, int b) {
    a=find_set(a);
    b=find_set(b);
    if (a!=b) {
        if (rank_sz[a]<rank_sz[b]) {
            swap(a, b);
        }
        parent[b]=a;
        if (rank_sz[a]==rank_sz[b]) {
            rank_sz[a]++;
        }
    }
}

int main() {
    int n,m;
    cin>>n>>m;
    parent.resize(n+1);
    rank_sz.resize(n+1,0);
    for (int i=1; i<=n; i++) {
        parent[i]=i;
    }
    for (int i=0; i<m; i++) {
        int op,x,y;
        cin>>op>>x>>y;
        if (op==1) {
            union_sets(x,y);
        } else if (op==2) {
            if (find_set(x)==find_set(y)) {
                cout<<"DA\n";
            } else {
                cout<<"NU\n";
            }
        }
    }
}