Cod sursa(job #2289138)

Utilizator HoratioHoratiu Duma Horatio Data 24 noiembrie 2018 11:32:27
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>

/*
Copyright @DumaHoratiu 2018
Nu copiati ca bulangii, Buhai
*/

#include <cstdio>

using namespace std;

int daddy[100005];
int h[100005];

int op,n;

int serch(int x)
{
    int r;
    for(r = x;daddy[r]!=r;r=daddy[r])
    while(daddy[x]!=x)
    {
        int y=daddy[x];
        daddy[x]=r;
        x=y;
    }
    return r;
}


int main()
{

    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d %d",&n,&op);

    for(int i=1;i<=n;i++)
    {
        daddy[i]=i;
        h[i]=1;
    }

    for(int i=0;i<op;i++)
    {
        int a,b,mod;
        scanf("%d %d %d",&mod,&a,&b);

        if(mod==1)
        {
            int ra=serch(a);
            int rb=serch(b);
            if(h[ra]>h[rb])
            {
                daddy[rb]=ra;
            }
            else daddy[ra]=rb;
            if(h[ra]==h[rb])
                h[rb]++;

        }
        else
        {
            if(serch(a)==serch(b))
                printf("DA\n");
            else
                printf("NU\n");
        }
    }


    return 0;
}