Cod sursa(job #3366094)

Utilizator OrhanZLTOrhan Zlatkov OrhanZLT Data 29 septembrie 2026 09:01:20
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;
int parents[100005],rnk[100005];
int fiind(int a){
    if(parents[a]==a)return a;
    return parents[a]=fiind(parents[a]);
}
void onion(int a,int b){
    int x=fiind(a);
    int y=fiind(b);
    if(x!=y){
        if(rnk[x]==rnk[y]){
            rnk[x]++;
        }
        if(rnk[x]<rnk[y])swap(x,y);
        parents[y]=x;
    }
    return;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    ifstream cin("disjoint.in");
    ofstream cout("disjoint.out");
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        parents[i]=i;
    }
    while(k--){
        int a,b,c;
        cin>>a>>b>>c;
        if(a==1){
            onion(b,c);
        }
        else{
            cout<<((fiind(b)==fiind(c))?"DA\n":"NU\n");
        }
    }
    return 0;
}