Cod sursa(job #3003066)

Utilizator mati.coldea@gmail.comMatei Coldea [email protected] Data 15 martie 2023 13:58:54
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
vector<int> parent(100005);
vector<int> rang(100005);


void make_set(int v){
rang[v]=0;
parent[v]=v;



}


int find_set(int v){

    if(parent[v]==v){
        return v;

    }

    return parent[v]= find_set(parent[v]);


}


void union_set(int a, int b){

    a= find_set(a);
    b= find_set(b);

    if(rang[a]<rang[b]){
        swap(a,b);
    }
    parent[b]=a;

    if(rang[a]== rang[b]){
        rang[a]++;
    }

}








int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(0);
    int n,m;
    fin>>n>>m;
    int t,a,b;

        for(int i=1;i<=n;i++){
            make_set(i);
        }


    for(int q=1;q<=m;q++){
        fin>>t>>a>>b;
        if(t==1){
            union_set(a,b);
        }
        else{
            if(find_set(a)==find_set(b)){
                fout<< "DA"<<'\n';
            }
            else{
                fout<< "NU" << '\n';
            }
        }
    }




    fin.close();
    fout.close();
    return 0;

}