Cod sursa(job #582328)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 15 aprilie 2011 11:12:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>

#define dim 100100

int t[dim],r[dim],n,m;
int find ( int &x )
{
    while ( x!=t[x] )
    x = t[x] ;
    return x;
}
void unite (int x, int y )
{
    if ( r[x] > r[y] )
    {
        t[ x ] = y;
    }
    else
    {
        t[ y ] = x;
    }
    if ( r[x] == r[y] )
    r[x]++ ;
}
void solve()
{
    scanf("%d %d",&n,&m);
    for(int i=1 ; i<=n;i++)
    t[i] = i;
    int x,y,t;
    for(int k=1 ; k<=m ; k++)
    {
        scanf("%d %d %d",&t , &x , &y);
        if ( t == 1 )
        {
            unite ( find ( x ) , find ( y  ) );
        }
        else
        if ( find ( x ) == find ( y ) )
        printf("DA\n");
        else
        printf("NU\n");
    }
}
int main ()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    solve();
    return 0;
}