Cod sursa(job #2460031)

Utilizator nTropicGravityesadasdwaadwqafr nTropicGravity Data 22 septembrie 2019 15:12:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include    <fstream>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

#define ARRAY_MAX 100005

int Level[ARRAY_MAX], Parent[ARRAY_MAX];
int N, M, X, Y, key;

int Root(int K) {
    if (Parent[K] == K)
        return K;

    return Root(Parent[K]);
}

void Merge(int X, int Y) {
    if (Root(X) != Root(Y)) {
        if (Level[Root(X)] > Level[Root(Y)])
            Parent[Root(Y)] = Root(X);

        else {
            Parent[Root(X)] = Root(Y);

            if (Level[Root(X)] == Level[Root(Y)])
                Level[Root(Y)]++;
        }
    }
}

int main() {
    fin >> N >> M;

    for (int i = 1; i <= N; i++) {
        Parent[i] = i;
        Level[i] = 1;
    }

    for (int i = 1; i <= M; i++) {
        fin >> key >> X >> Y;

        if (key == 1)
            Merge(Root(X), Root(Y));

        else
            if (Root(X) == Root(Y))
                fout << "DA\n";

            else
                fout << "NU\n";
    }
}