Cod sursa(job #2075067)

Utilizator pibogaBogdan piboga Data 25 noiembrie 2017 11:14:03
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <cstdio>
#define nmax 100002

using namespace std;


int cod,parinte[nmax],m,n,i,nod[3],rad[nmax],inod,h[3];
int aux;

int frad (int nod)
{
    while (parinte[nod]>0)
    {
         nod=parinte[nod];
    }
    return nod;
}


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

    scanf ("%d%d",&n,&m);

    for (i=1; i<=n; ++i)
    {
        parinte[i]=-1;
    }

    for (i=1; i<=m; ++i)
    {
        scanf ("%d%d%d",&cod,&nod[1],&nod[2]);

        for (inod=1; inod<=2; ++inod)
        {
            rad[inod]=frad(nod[inod]);
        }


        if (cod==1)
        {
            if (rad[1]!=rad[2])
            {
                if (parinte[rad[1]]<parinte[rad[2]])
                {
                    parinte[rad[1]]+=parinte[rad[2]];
                    parinte[rad[2]]=rad[1];
                }
                else
                {
                    parinte[rad[2]]+=parinte[rad[1]];
                    parinte[rad[1]]=rad[2];
                }
            }

        }
        else
        {
            if (rad[1]==rad[2])
                printf("DA\n") ;
            else
                printf ("NU\n") ;

        }


    }

    return 0;
}