Cod sursa(job #3293785)

Utilizator Floroiu_MariusFloroiu Marius Cristian Floroiu_Marius Data 12 aprilie 2025 16:25:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int tata[100003],rang[100003];
inline int findtata(int nod)
{
    if (tata[nod]!=nod)
        tata[nod]=findtata(tata[nod]);
    return tata[nod];
}
inline void combina(int a,int b)
{
    a=findtata(a);
    b=findtata(b);
    if (rang[a]>rang[b]) tata[b]=a;
    else if (rang[b]>rang[a]) tata[a]=b;
    else
    {
        tata[b]=a;
        rang[a]++;
    }
}
int n,m,op,x,y;
int main()
{
    fin>>n>>m;
    for (int i=1;i<=n;i++)
        tata[i]=i;
    while (m--)
    {
        fin>>op>>x>>y;
        if (op==1) combina(x,y);
        else
        {
            if (findtata(x)==findtata(y))
                fout<<"DA";
            else
                fout<<"NU";
            fout<<'\n';
        }
    }
    return 0;
}