Cod sursa(job #1807591)

Utilizator edicCiuculescu Eduard edic Data 16 noiembrie 2016 18:55:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<cstdio>
using namespace std;
int sef[100001];
int h[100001];
int fnd(int i)
{
    if(sef[i]==i)
    {
        return i;
    }
    else
    {
        sef[i]=fnd(sef[i]);
        return sef[i];
    }
}
void unin(int i,int j)
{
    int a=fnd(i);
    int b=fnd(j);
    if(h[a]>h[b])
    {
        sef[b]=a;
    }
    else
    {
        if(h[b]>h[a])
        {
            sef[a]=b;
        }
        else
        {
            sef[a]=b;
            h[a]++;
        }
    }
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int n,i,k,x,y,c;
    scanf("%d%d",&k,&n);
    for(i=1;i<=k;i++)
    {
        sef[i]=i;
    }
    for(i=1;i<=n;i++)
    {
        scanf("%d%d%d",&c,&x,&y);
        {
            if(c==1)
            {
                unin(x,y);
            }
            else
            {
                if(fnd(x)==fnd(y))
                {
                    printf("DA\n");
                }
                else
                {
                    printf("NU\n");
                }
            }
        }
    }
    return 0;
}