Cod sursa(job #2459809)

Utilizator nTropicGravityesadasdwaadwqafr nTropicGravity Data 22 septembrie 2019 13:58:26
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 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] == 0)
        return K;

    else {
        Parent[K] = Root(Parent[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;

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

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

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