Cod sursa(job #2243848)

Utilizator MaxTeoTeo Oprescu MaxTeo Data 21 septembrie 2018 15:37:08
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
using namespace std;

FILE *f = freopen( "disjoint.in", "r", stdin );
FILE *g = freopen( "disjoint.out", "w", stdout );

int n, m, father[100005], dim[100005];

int Dad( int x )
{
    if( x != father[x] )
        father[x] = Dad( father[x] );
    return father[x];
}

void Union( int x, int y )
{
    x = Dad( x );
    y = Dad( y );

    if( dim[x] < dim[y] )
    {
        dim[y] += dim[x];
        father[x] = y;
    }
    else
    {
        dim[x] += dim[y];
        father[y] = x;
    }
}

int main()
{
    scanf( "%d%d", &n, &m );
    for( int i = 1; i <= n; ++i )
    {
        father[i] = i;
        dim[i] = 1;
    }

    for( int i = 1; i <= m; ++i )
    {
        int op, x, y;
        scanf( "%d%d%d", &op, &x, &y );

        if( op == 1 )
            Union( x, y );
        else
            printf( "%s\n", Dad( x ) == Dad( y ) ? "DA" : "NU" );
    }

    return 0;
}