Cod sursa(job #3260720)

Utilizator Victor_9Diaconescu Victor Victor_9 Data 3 decembrie 2024 15:38:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e5 + 5;

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

int n, m, x, y, c, tata[nmax], h[nmax];


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


void Unire(int a, int b){
    
    a = Radacina(a);
    b = Radacina(b);
    
    if(h[a] < h[b]){
        tata[a] = b;
        h[b] += h[a];
    }else{
        tata[b] = a;
        h[a] += h[b];
    }
    
}


int main()
{
    
    fin>>n>>m;
    
    for(int i=1;i<=n;i++){
        h[i] = 1;
        tata[i] = i;
    }
    
    for(int i=1;i<=m;i++){
        fin>>c>>x>>y;
        
        if(c == 1){
            if(Radacina(x) != Radacina(y)){
                Unire(x, y);
            }
        }else{
            if(Radacina(x) != Radacina(y)){
                fout<<"NU"<<"\n";
            }else{
                fout<<"DA"<<"\n";
            }
        }
    }
    
    
}