Cod sursa(job #3150236)

Utilizator Victor_9Diaconescu Victor Victor_9 Data 15 septembrie 2023 16:37:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
//
#include <bits/stdc++.h>
using namespace std;

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

long long i, j, n, m, op, x, y, maxx, T[1000001], Rang[1000001];

int Radacina(int k){
    if(T[k] == k)
        return k;
    else
    {
        int r = Radacina(T[k]);
        T[k] = r;
        return r;
    }
}

void Unire(int k, int p)
{
    int rk = Radacina(k), rp = Radacina(p);
    if(rk != rp)
    {
        if(Rang[rk] > Rang[rp])
            T[rp] = rk;
        else
        {
            T[rk] = rp;
            if(Rang[rk] == Rang[rp])
                Rang[rp] ++;
        }
    }
    
}




int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++){
        Rang[i]=1;
        T[i]=i;
    }
    
    for(i=1;i<=m;i++)
    {
        fin>>op;
        
        if(op==1){
            fin>>x>>y;
            Unire(x , y);
        }else if(op==2){
            fin>>x>>y;
            if(T[Radacina(x)]==T[Radacina(y)]){
                fout<<"DA"<<endl;
            }else{
                fout<<"NU"<<endl;
            }
            
        }
        
    }
    
    
    
    
    
}