Cod sursa(job #3343598)

Utilizator cosmin_90Drignei Cosmin-Cristian cosmin_90 Data 27 februarie 2026 20:09:56
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX=1e5+2;
int t[NMAX];
int s[NMAX];
int findRoot(int x){
    int root=x;
    int aux=x;
    while(t[root]!=root){
        root=t[root];
    }
    while(x!=root){
        aux=t[x];
        t[x]=root;
        x=aux;
    }
    return x;
}
int main(){
    int n,m;
    fin>>n>>m;
    for(int i=0;i<NMAX;i++){
        t[i]=i;
        s[i]=1;
    }
    for(int i=0;i<m;i++){
        int c,x,y;
        fin>>c>>x>>y;
        if(c==1){
            x=findRoot(x);
            y=findRoot(y);
            if(s[x]>s[y]){
                t[y]=x;
                s[x]+=s[y];
            }else{
                t[x]=y;
                s[y]+=s[x];
            }
        }else if(c==2){
            if(findRoot(x)==findRoot(y)){
                fout<<"DA"<<'\n';
            }else{
                fout<<"NU"<<'\n';
            }
        }
    }
    return 0;
}