Cod sursa(job #1974408)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 27 aprilie 2017 16:06:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>

using namespace std;
const int Nmax = 100005;
int daddy[Nmax], ranc[Nmax];

int whos_ur_daddy(int k) {
    if(daddy[k] != k)
        daddy[k] = whos_ur_daddy(daddy[k]);
    return daddy[k];
}

int couple(int a, int b) {
    if(ranc[a] > ranc[b])
        daddy[b] = a;
    else if(ranc[b] > ranc[a])
        daddy[a] = b;
    else {
        daddy[b] = a;
        ranc[a] += 1;
    }
}

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

    int N, K;
    scanf("%d%d", &N, &K);
    for(int i = 1; i <= N; ++i)
        daddy[i] = i;

    for(int i = 1; i <= K; ++i) {
        int a,b,c;
        scanf("%d%d%d",&a, &b, &c);
        if(a == 1)
            couple(whos_ur_daddy(b), whos_ur_daddy(c));
        else {
            if(whos_ur_daddy(b) == whos_ur_daddy(c))
                printf("DA\n");
            else
                printf("NU\n");
        }
    }

    return 0;
}