Cod sursa(job #1803791)

Utilizator mirunazMiruna Zavelca mirunaz Data 11 noiembrie 2016 20:34:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;

int n, m, sef[100003];

int Find (int x)
{
    if (x == sef [x]){
        return x;
    }
    sef [x] = Find (sef[x]);
    return sef [x];
}

void Union (int x, int y)
{
    int i, j;
    i = Find (x);
    j = Find (y);
    if (rand()%2){
        sef [j] = i;
    }
    else{
        sef [i] = j;
    }
}

int main ()
{
    freopen ("disjoint.in", "r", stdin);
    freopen ("disjoint.out", "w", stdout);
    int cod, x, y;
    srand (time(0));
    scanf ("%d %d", &n, &m);
    for (int i=1; i<=n; i++){
        sef [i] = i;
    }
    for (int i=1; i<=m; i++){
        scanf ("%d %d %d", &cod, &x, &y);
        if (cod == 1){
            Union (x, y);
        }
        else{
            if (Find (x) == Find (y)){
                printf ("DA\n");
            }
            else{
                printf ("NU\n");
            }
        }
    }
    return 0;
}