Cod sursa(job #3350070)

Utilizator cris71Vlad Bogdan Cristian cris71 Data 5 aprilie 2026 11:13:51
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int const lmax=1e5+7;
int n,m;
int t[lmax];
int h[lmax];
int root(int node)
{
    if(t[node]==0)return node;
    int aux=root(t[node]);
    t[node]=aux;
    return aux;
}
void merger(int n1, int n2)
{
    int r1=root(n1);
    int r2=root(n2);
    if(r1==r2)return;
    if(h[r1]==h[r2])
    {
        h[r1]++;
        t[r2]=r1;
    }
    else if(h[r1]<h[r2])t[r1]=r2;
    else t[r2]=r1;
}
int main()
{
    fin>>n>>m;
    for(int i=0;i<m;i++)
    {
        int a,b,op;
        fin>>op>>a>>b;
        if(op==1)
        {
            merger(a,b);
        }
        else
        {
            int ra=root(a);
            int rb=root(b);
            if(ra==rb)fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
    fin.close();
    fout.close();
    return 0;
}