Cod sursa(job #3304488)

Utilizator Grama2008Grama Andrei Teodor Grama2008 Data 24 iulie 2025 12:22:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

const int N=1e5+5;

int parent[N], sz[N];

int findparent(int x){
    if (parent[x]==x){
        return x;
    }
    return parent[x]=findparent(parent[x]);
}

void unite(int a, int b){
    int roota=findparent(a);
    int rootb=findparent(b);
    if (roota!=rootb){
        if (sz[rootb]>sz[roota]){
            swap(roota, rootb);
        }
        parent[rootb]=roota;
        sz[roota]+=sz[rootb];
    }
}

int main()
{
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n,m;cin>>n>>m;
    for (int i=1;i<=n;i++){
        parent[i]=i;
        sz[i]=1;
    }
    for (int i=0;i<m;i++){
        int t,u,v;
        cin>>t>>u>>v;
        if (t==1){
            unite(u, v);
        }
        else if (t==2){
            int rootu=findparent(u);
            int rootv=findparent(v);
            if (rootu==rootv){
                cout<<"DA\n";
            }
            else{
                cout<<"NU\n";
            }
        }
    }
    return 0;
}