Cod sursa(job #1598678)

Utilizator georgeliviuPereteanu George georgeliviu Data 13 februarie 2016 10:52:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>

using namespace std;

#define Nmax 100050
int p[Nmax] , n , m ;

struct poz
{
    int operatie , prim , sec ;
};

poz v[100050] ;

void init ()
{
    for ( int i = 1 ; i <= n ; ++i )
    {
        p[i] = i ;
    }
}

int find_node ( int nod )
{
    if ( p[nod] == nod ) return nod;
    p[nod] = find_node(p[nod]);
    return p[nod];
}

void union_node ( int x , int y )
{
    p[find_node(x)] = p[find_node(y)] ;
}

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

    scanf("%d %d",&n,&m);
    init();
    for ( int i = 1 ; i <= m ; i++ )
    {
        scanf("%d %d %d",&v[i].operatie,&v[i].prim,&v[i].sec);
        if ( v[i].operatie == 1 )
        {
                union_node(v[i].prim,v[i].sec) ;
        }
        else if ( find_node(v[i].prim) == find_node(v[i].sec) ) printf("DA\n");
        else
        {
            printf("NU\n");
        }
    }

}