Cod sursa(job #1011131)

Utilizator heracleRadu Muntean heracle Data 16 octombrie 2013 11:26:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <cstdio>

int n,k;
const int Q=100007;
int t[Q];

int radacinare(int x)
{
    if(t[x]==0)
        return x;
    t[x]=radacinare(t[x]);
    return t[x];
}


int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);

    scanf("%d%d",&n,&k);
    int l,x,y,act,ry;
    for(int i=1; i<=k; i++)
    {
        scanf("%d%d%d",&l,&x,&y);

        if(x>y)
        {
            act=x;
            x=y;
            y=act;
        }

        if(l==1)
        {
            /*
            act=radacinare(x);
            ry=radacinare(y);
            t[ry]=act;
            while(ry!=act)
            {
                t[ry]=act;
                ry=radacinare(ry-1);
            }
            */
            t[radacinare(y)]=radacinare(x);
        }
        else
        {
            /*
            act=radacinare(y);

            if(act<=x)
            {
                printf("DA\n");
            }
            else
            {
                printf("NU\n");
            }
            */
            if(radacinare(x)==radacinare(y))
            {
                printf("DA\n");
            }
            else
                printf("NU\n");
        }

    }

    return 0;
}