Cod sursa(job #3185408)

Utilizator Victor_9Diaconescu Victor Victor_9 Data 18 decembrie 2023 20:24:32
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
//paduri  -> corect
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e5 + 2;

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

int N, M, cod, x, y, i, j;
int tati[nmax], Rang[nmax];


int Radacina(int nod){
    if(tati[nod] == nod){
        return nod;
    }else{
        tati[nod] = Radacina(tati[nod]);
    }
}


void Unire(int a, int b){
    a = Radacina(a);
    b = Radacina(b);
    
    if(Rang[a]>Rang[b]){
        tati[b] = a;
        Rang[a] += Rang[b];
    }else{
        tati[a] = b;
        Rang[b] += Rang[a];
    }
    
}


int main()
{
    
    fin>>N>>M;
    
    for(i=1;i<=N;i++){
        tati[i] = i;
        Rang[i] = 1;
    }
    
    for(j=1;j<=M;j++){
        
        fin>>cod>>x>>y;
        
        if(cod==1){
            Unire(x , y);
        }else{
            if(Radacina(x)==Radacina(y)){
                fout<<"DA"<<'\n';
            }else{
                fout<<"NU"<<'\n';
            }
        }

    }
 
   
}