Cod sursa(job #3342756)

Utilizator Dascalu_LucaDascalu Luca Petru Dascalu_Luca Data 25 februarie 2026 16:43:20
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int parinte[100005],N,M,op,x,y,rang[100005];

int FindRoot(int x){
    if(parinte[x]==x){
        return x;
    }
    else return parinte[x]=FindRoot(parinte[x]);
}

void Union(int x, int y){
    x=FindRoot(x);
    y=FindRoot(y);
    if(x==y) return;
    if(rang[x]<rang[y]) swap(x,y);
    if(rang[x]==rang[y]) rang[x]++;
    parinte[y]=x;
}

bool Find(int x, int y){
    if(FindRoot(x)==FindRoot(y)) return 1;
    return 0;
}

int main()
{
    fin>>N>>M;
    for(int i=1;i<=N;i++){
        parinte[i]=i;
        rang[i]=1;
    }
    for(int i=1;i<=M;i++){
        fin>>op>>x>>y;
        if(op==1){
            Union(x,y);
        }
        else{
            bool ok=Find(x,y);
            if(ok) fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
    return 0;
}