Cod sursa(job #3039302)

Utilizator DariusM17Murgoci Darius DariusM17 Data 28 martie 2023 13:13:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in") ;
ofstream fout("disjoint.out");
const int NMAX=1e5+5 ;
int n,m,op,x,y,t[NMAX],rang[NMAX] ;
int radacina(int x)
{
    if(t[x]==x) return x ;
    else
    {
        int val=radacina(t[x]) ;
        t[x]=val ;
        return val ;
    }
}
void reuniune(int x,int y)
{
    if(rang[x]<rang[y]) t[radacina(x)]=radacina(y),rang[x]+=rang[y] ;
    else t[radacina(y)]=radacina(x),rang[y]+=rang[x] ;
}
int main()
{
    fin>>n>>m ;
    for(int i=1; i<=n; ++i)  t[i]=i,rang[i]=1 ;
    for(int i=1; i<=m; ++i)
    {
        fin>>op>>x>>y ;
        if(op==1) reuniune(x,y) ;
        else
        {
            if(radacina(x)==radacina(y)) fout<<"DA\n" ;
            else fout<<"NU\n" ;
        }
    }
    return 0 ;
}