Cod sursa(job #2425863)

Utilizator ifrimencoAlexandru Ifrimenco ifrimenco Data 25 mai 2019 10:54:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>

using namespace std;
int h[100003], Tata[100003];

void Union(int x, int y) {
    if (h[x] > h[y]) Tata[y] = x;
    else Tata[x] = y;
    if (h[x] == h[y]) h[y]++;
}

int Find(int Node) {
    int Root = Node;
    while (Tata[Root]) Root = Tata[Root];
    int y = Node, Temp;
    while (y != Root) {
        Temp = Tata[y];
        Tata[y] = Root;
        y = Temp;
    }
    return Root;
}

int main()
{
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");
    int n, m;
    fin >> n >> m;
    int Op, x, y;
    for (; m; --m) {
        fin >> Op >> x >> y;
        if (Op == 1)
            Union(Find(x), Find(y));
        else if (Op == 2) {
            if (Find(x) == Find(y)) fout << "DA\n";
            else fout << "NU\n";
        }
    }
    return 0;
}