Ejercicio00:00
¿Quieres un reto mayor?
Resuelve en 20:00
info
Importante: Para que se registre el resultado tienes que iniciar sesión.
Ancestro Común Más Bajo (LCA con elevación binaria)
Master100 pts·Algoritmos
Enunciado
Dado un árbol con n nodos enraizado en el nodo 1, responde q consultas: ¿cuál es el ancestro común más bajo (LCA) de los nodos u y v?
El LCA de dos nodos u y v es el nodo más profundo que es ancestro de ambos simultáneamente.
Implementa la técnica de elevación binaria (binary lifting) para preprocesar el árbol en O(n log n) y responder cada consulta en O(log n).
Idea del algoritmo
- Preprocesamiento: usando BFS desde la raíz, calcula la profundidad de cada nodo y su 2^k-ésimo ancestro para k = 0, 1, ..., ⌊log₂ n⌋.
- Consulta LCA(u, v): iguala las profundidades subiendo el nodo más profundo con potencias de 2; luego sube ambos nodos simultáneamente hasta que coincidan justo por debajo del LCA.
Parámetros
n— número de nodos (numerados del1aln)edges— aristas no dirigidas[u, v]que forman el árbolqueries— pares[u, v]a consultar
Retorno
Array con el LCA de cada consulta, en el mismo orden.
Ejemplo
lca(7, [[1,2],[1,3],[2,4],[2,5],[3,6],[3,7]], [[4,5],[4,6],[5,7]])
// Árbol: 1
// / \
// 2 3
// / \ / \
// 4 5 6 7
//
// LCA(4,5) = 2, LCA(4,6) = 1, LCA(5,7) = 1
// → [2, 1, 1]
Restricciones
- 1 ≤ n ≤ 10⁵
- |edges| = n − 1
- 1 ≤ |queries| ≤ 10⁵
- 1 ≤ u, v ≤ n
Restriccionesexpand_more
- Dificultad: Master
- Completa todos los test cases para obtener los 100 puntos.
- No modificar la línea
exportal final del archivo. - Se recomienda evitar el uso de inteligencia artificial para que realmente tú practiques los ejercicios.
Puedes usar console.log() para depurar. Los resultados aparecen en la Consola de salida, no en el navegador.
Inicia sesión para reaccionar
Inicia sesión para reaccionar