Cod sursa(job #3349862)

Utilizator cezarinfoTulceanu Cezar cezarinfo Data 2 aprilie 2026 21:44:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int NMAX=100007;
int n,m;
int p,a,b;
int dad[NMAX];
int len[NMAX];
int get_dad(int nr)
{
    int nod=nr;
    while(dad[nod]>0)
    {
        nod=dad[nod];
    }
    return nod;
}
bool predict(int a,int b)//1=da, 0=nu
{
    if(get_dad(a)==get_dad(b))
    {
        return 1;
    }
    return 0;
}
void merg(int a,int b)
{
    int dad1=get_dad(a);
    int dad2=get_dad(b);
    if(len[dad1]<len[dad2])
    {
        dad[dad1]=dad2;
    }
    else if(len[dad1]>len[dad2])
    {
         dad[dad2]=dad1;
    }
    else
    {
        dad[dad1]=dad2;
        len[dad2]++;
    }
}
int main()
{
    in>>n>>m;
    for(int i=1;i<=m;i++)
    {
        in>>p>>a>>b;
        if(p==1)
        {
            merg(a,b);
        }
        else
        {
            if(predict(a,b)==1)
            {
                out<<"DA\n";
            }
            else
            {
                out<<"NU\n";
            }
        }
    }
}