// ERROR A PROPÓSITO: unir enlazando los elementos y no sus raíces.
#include <iostream>
#include <numeric>
#include <vector>

namespace {

int find(const std::vector<int>& parent, int x) {
    while (parent[x] != x) {
        x = parent[x];
    }
    return x;
}

}  // namespace

int main() {
    std::vector<int> parent(4);
    std::iota(parent.begin(), parent.end(), 0);
    parent[0] = 1;  // unir 0 con 1
    parent[0] = 2;  // unir 0 con 2: debió enlazar las raíces, y 0 ya no es raíz
    parent[3] = 3;
    std::cout << "0 y 2: " << (find(parent, 0) == find(parent, 2) ? "juntos" : "separados") << "\n";
    std::cout << "0 y 1: " << (find(parent, 0) == find(parent, 1) ? "juntos" : "separados") << "\n";
    return 0;
}
