Условие
В генеалогическом древе определите для двух элементов их наименьшего общего предка (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
