Cod sursa(job #1694517)

Utilizator fotadavidFota David fotadavid Data 25 aprilie 2016 15:56:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>

using namespace std;
struct Triplet
{
    int t, x, y;
};

int v[100005];

int Radacina( int x )
{
    int cx = x, a;

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

    while(v[cx] != cx){
        a = v[cx];
        v[cx] = x;
        cx = a;
    }

    return x;
}


Triplet a;
int main()
{

    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    int n, m, i;
    scanf("%d%d", &n, &m);
    for( i = 1; i <= n; i++ )
        v[i] = i;
    for( i = 1; i <= m; i++)
    {
        scanf("%d%d%d", &a.t, &a.x, &a.y);
        if( a.t == 1 )
        {
            v[Radacina(a.x)] = Radacina(a.y);
        }else{
            if(Radacina(a.x) ==  Radacina(a.y))
                printf("DA\n");
            else
                printf("NU\n");
        }

    }
    return 0;
}