El concurso D se trata de un árbol enraizado donde: Hay N ≥ 2 vértices. La raíz R representa la ubicación del hotel. Puedes hacer consultas limitadas a la función lca(u, v) para descubrir la raíz. El número máximo de consultas permitidas es ⌊N/2⌋. Después de usar las consultas, debes adivinar la raíz R. Tu entrenador intentó una heurística basada en LCA, pero esa idea no siempre funciona en árboles especialmente construidos. Por eso queremos diseñar un árbol pequeño que rompa su solución, para conseguir la puntuación más alta (porque cuanto más pequeño, mejor).
El problema que se nos presenta es diseñar un árbol pequeño que rompa la heurística basada en LCA (Lowest Common Ancestor) utilizada por el entrenador. La heurística consiste en encontrar la raíz del árbol mediante la función LCA, que devuelve el vértice más cercano común entre dos vértices dados. Para romper esta heurística, podemos diseñar un árbol pequeño que tenga la siguiente estructura: 1. El árbol tiene 3 vértices: R (raíz), A y B. 2. La raíz R está conectada a A y B. 3. A y B están conectadas entre sí. La idea detrás de este diseño es que la función LCA(A, B) devuelva A, ya que A es el vértice más cercano común entre A y B. Sin embargo, esto no nos dice nada sobre la raíz R, ya que R es el vértice más cercano común entre A y R, y entre B y R. La heurística basada en LCA no puede determinar la raíz R en este caso, ya que la función LCA(A, B) devuelve A, que no es la raíz R. Por lo tanto, este árbol pequeño rompe la heurística basada en LCA. Aquí hay un ejemplo de código en C++ que implementa este árbol: ```cpp #include <iostream> class Arbol { public: int raiz; int a; int b; Arbol(int r, int a, int b) : raiz(r), a(a), b(b) {} }; int main() { Arbol arbol(0, 1, 2); std::cout << "Raíz: " << arbol.raiz << std::endl; std::cout << "A: " << arbol.a << std::endl; std::cout << "B: " << arbol.b << std::endl; return 0; } ``` En este ejemplo, el árbol tiene 3 vértices: 0 (raíz), 1 (A) y 2 (B). La función LCA(1, 2) devolvería 1, lo que no nos dice nada sobre la raíz 0. Por lo tanto, este árbol pequeño rompe la heurística basada en LCA.