Cod sursa(job #2065832)

Utilizator pibogaBogdan piboga Data 14 noiembrie 2017 12:04:17
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 rfin[3],aux;

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

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

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

        for (inod=1;inod<=2;++inod)
        {
            rad[inod]=nod[inod];
            while (parinte[rad[inod]])
            {
                rad[inod]=parinte[rad[inod]];
                ++h[inod];
            }
            rfin[inod]=rad[inod];
        }

        for (inod=1;inod<=2;++inod)
        {
            rad[inod]=nod[inod];
            while (parinte[rad[inod]])
            {
                aux=rad[inod];
                rad[inod]=parinte[rad[inod]];
                parinte[aux]=rfin[inod];

            }
        }

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

        }


    }

    return 0;
}