Cod sursa(job #1265514)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 17 noiembrie 2014 13:19:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>

int n, m;

class DisjointSets {
    public:
        DisjointSets() {
            for (size_t i = 1; i <= size; ++i)
                root[i] = i;
        }

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

        void Join(int x, int y) {
            if (height[x] < height[x])
                root[x] = y;
            else
                root[y] = x;
            if (height[x] == height[y])
                ++height[x];
        }
    private:
        static const size_t size = 100005;
        int root[size];
        int height[size];
};

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

    int op, x, y;

    scanf("%d %d", &n, &m);
    DisjointSets s;

    for (int i = 1; i <= m; ++i) {
        scanf("%d %d %d", &op, &x, &y);
        if (op == 1)
            s.Join(s.Find(x), s.Find(y));
        else {
            if (s.Find(x) == s.Find(y))
                printf("DA\n");
            else
                printf("NU\n");
        }
    }

    return 0;
}