Cod sursa(job #2839409)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 25 ianuarie 2022 21:24:56
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

const int dim=100009;

int n,m;
int parent[dim],sz[dim];

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

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

signed main(){
        fin>>n>>m;
    for(int i=1;i<=n;i++){
        parent[i]=i;
        sz[i]=1;
    }

    while(m--){
        int op,a,b;
            fin>>op>>a>>b;
        if(op==1){
            union_sets(a,b);
        }
        else{
            fout<<( find_set(a)==find_set(b) ? "DA" :"NU")<<'\n';
        }
    }
}