Cod sursa(job #1889626)

Utilizator gabib97Gabriel Boroghina gabib97 Data 22 februarie 2017 20:10:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <stdio.h>

#define N 100001
using namespace std;
int n, m, p, x, y, r1, r2, t[N], h[N];

int root(int n)
{
    int aux = n, w;
    while (t[n]) n = t[n];
    while (t[aux]) {
        w = t[aux];
        t[aux] = n;
        aux = w;
    }
    return n;
}

int main()
{
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    scanf("%i%i", &n, &m);
    while (m--) {
        scanf("%i%i%i", &p, &x, &y);
        r1 = root(x);
        r2 = root(y);
        if (p == 1) {
            if (h[r1] < h[r2])
                t[r1] = r2;
            else if (h[r1] > h[r2])
                t[r2] = r1;
            else {
                t[r2] = r1;
                h[r1]++;
            }
        } else printf("%s", r1 == r2 ? "DA\n" : "NU\n");
    }
    return 0;
}