Условие
В генеалогическом древе определите для двух элементов их наименьшего общего предка (Lowest Common Ancestor). Наименьшим общим предком элементов A и B является такой элемент C, что С является предком A, C является предком B, при этом глубина C является наибольшей из возможных. При этом элемент считается своим собственным предком.
Формат входных данных аналогичен предыдущей задаче
Для каждого запроса выведите наименьшего общего предка данных элементов.
Решение
def ancestors(child, p_tree): result = [] result.append(child) while child in p_tree: child = p_tree[child] result.append(child) return result p_tree = dict() n = int(input()) for i in range(n - 1): child, parent = input().split() p_tree[child] = parent m = int(input()) for i in range(m): child_1, child_2 = input().split() ancestors_for_1 = set(ancestors(child_1, p_tree)) for ancestor in ancestors(child_2, p_tree): if ancestor in ancestors_for_1: print(ancestor) break