Cod sursa(job #1757360)

Utilizator din99danyMatei Daniel din99dany Data 14 septembrie 2016 21:34:06
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
using namespace std;

#define NMAX 100005

int v[ NMAX ],
    a[ NMAX ];
int n;

int radacina( int x );
bool query( int x, int y );
void reuniune( int x, int y );

int main()
{

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

    int m, i, j, x, y, c, k;

    scanf("%d%d",&n,&m);
    for( i = 1; i <= n; ++i ) v[ i ] = i;
    while( m-- ){
        scanf("%d%d%d",&c,&x,&y);
        if( c == 1 ) reuniune( x, y );
        else
            if( query( x, y ) ) printf("DA\n");
            else printf("NU\n");
    }

    return 0;

}


int radacina( int x ){

    while( v[ x ] != v[ v[ x ] ] ) v[ x ] = v[ v[ x ] ];
    return v[ x ];

}

void reuniune( int x, int y ){

    int rx, ry;
    rx = radacina( x );
    ry = radacina( y );

    v[ rx ] = ry;

}

bool query( int x, int y ){

    int rx, ry, aux;
    rx = radacina( x );
    ry = radacina( y );

    return rx == ry;

}