Cod sursa(job #3283601)

Utilizator Floroiu_MariusFloroiu Marius Cristian Floroiu_Marius Data 9 martie 2025 22:59:07
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m;
int rang[100003],tata[100003];
int op,x,y;
inline void unite(int a,int b)
{
    if (rang[a]>=rang[b]) tata[b]=a,rang[a]++;
    else tata[a]=b,rang[b]++;
}
inline int findtata(int nod)
{
    int aux=nod;
    while (tata[nod]!=nod) nod=tata[nod];
    while (tata[aux]!=aux)
    {
        int y=tata[aux];
        tata[aux]=nod;
        aux=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) unite(findtata(x),findtata(y));
        else
        {
            int tata1=findtata(x);
            int tata2=findtata(y);
            if (tata1==tata2)
                fout<<"DA";
            else
                fout<<"NU";
            fout<<'\n';
        }
    }
    return 0;
}