Cod sursa(job #2284011)

Utilizator I_am_not_a_robotMr Domino I_am_not_a_robot Data 16 noiembrie 2018 16:07:41
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

const int N=100000+5;

int n,q;
int h[N],t[N];

inline int dad(int a)
{
    if(t[a]==a)
    {
        return a;
    }
    else
    {
        t[a]=dad(t[a]);
        return t[a];
    }
}

inline void uni(int a,int b)
{
    a=dad(a);
    b=dad(b);
    if(a!=b)
    {
        if(h[a]>h[b])
        {
            t[b]=a;
        }
        else
        {
            t[a]=b;
            if(h[a]==h[b])
            {
                h[b]++;
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        t[i]=i;
        h[i]=1;
    }
    while(q--)
    {
        int t,x,y;
        cin>>t>>x>>y;
        if(t==1)
        {
            uni(x,y);
        }
        else
        {
            if(dad(x)==dad(y))
            {
                cout<<"DA\n";
            }
            else
            {
                cout<<"NU\n";
            }
        }
    }
    return 0;
}
/**



**/