Cod sursa(job #3286176)

Utilizator filiptudose2007Tudose Filip filiptudose2007 Data 13 martie 2025 19:45:58
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;
int t[100005],rang[100005];;
int Find(int x)
{
    int y=t[x];
    if(y==t[y])return y;
    return t[y]=Find(y);

}
void Union(int x, int y)
{
    int sefx=Find(x);
    int sefy=Find(y);
    if(rang[sefx]<rang[sefy])
    {
        t[sefx]=sefy;
    }
    else if(rang[sefx]>rang[sefy])
    {
        t[sefy]=sefx;
    }
    else
    {
        t[sefx]=sefy;
        rang[sefy]++;
    }
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    cin.sync_with_stdio(false);
    cin.tie(0);
    int n,q;
    cin>>n>>q;
    for(int i=1; i<=n; ++i)
    {
        t[i]=i;
        rang[i]=1;
    }
    while(q--)
    {
        int tip,x,y;
        cin>>tip>>x>>y;
        if(tip==1)
        {
            Union(x,y);
        }
        else
        {
            if(Find(x)==Find(y))cout<<"DA\n";
            else cout<<"NU\n";
        }
    }
    return 0;
}