Cod sursa(job #3252223)

Utilizator antonio_sefu_tauLaslau Antonio antonio_sefu_tau Data 28 octombrie 2024 21:07:35
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int dim=1e5+5;
int t[dim],r[dim],n,m;
void uneste(int x, int y){
    if(r[x]<r[y]){
        r[y]+=r[x];
        t[x]=y;
    }
    else{
        r[x]+=r[y];
        t[y]=x;
    }
}
int rad(int nod){
    if(nod==t[nod]){
        return nod;
    }
    else{
        return t[nod]=rad(t[nod]);
    }
}
int main(){
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        r[i]=1,t[i]=i;
    }
    for(int i=1;i<=m;i++){
        int op,x,y;
        fin>>op>>x>>y;
        if(op==1){
            if(rad(x)!=rad(y)){
                uneste(x,y);
            }
        }
        else{
            if(rad(x)==rad(y)){
                fout<<"DA"<<'\n';
            }
            else{
                fout<<"NU"<<'\n';
            }
        }
    }
    return 0;
}