Cod sursa(job #979941)

Utilizator florin.elfusFlorin Elfus florin.elfus Data 3 august 2013 16:05:20
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <stdio.h>
#define REP(i, a, b) for(int i = a; i <= b; ++i)
#define REPD(i, a, b) for(int i = a; i >= b; --i)
#define FOR(i, n) REP(i, 1, n)

int F[100100];

int father(int x) {
    return x == F[x] ? x : father(F[x]);
}

void unite(int x, int y) {
    F[father(x)] = father(y);
}

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

    int N, M;
    scanf("%d%d", &N, &M);

    FOR(i, N) F[i] = i;
    FOR(test, M) {
        int op, x, y;
        scanf("%d%d%d", &op, &x, &y);
        if (op == 1)
            unite(x, y);
        else
            printf("%s\n", father(x) == father(y) ? "DA" : "NU");
    }

    return 0;
}