Задача «Родословная: предки и потомки»

Условие

Даны два элемента в дереве. Определите, является ли один из них потомком другого.

Во входных данных записано дерево в том же формате, что и в предыдущей задаче Далее идет число запросов K. В каждой из следующих K строк, содержатся имена двух элементов дерева.

Для каждого такого запроса выведите одно из трех чисел: 1, если первый элемент является предком второго, 2, если второй является предком первого или 0, если ни один из них не является предком другого.

Решение

  1. def is_ancestor(man, older_man):
  2.     if man == older_man:
  3.         return True
  4.     while man in p_tree:
  5.         man = p_tree[man]
  6.         if man == older_man:
  7.             return True
  8.     return False
  9. p_tree = dict()
  10. n = int(input())
  11. for i in range(n - 1):
  12.     child, parent = input().split()
  13.     p_tree[child] = parent
  14. for i in range(int(input())):
  15.     first, second = input().split()
  16.     if is_ancestor(second, first):
  17.         print(1, end=' ')
  18.     elif is_ancestor(first, second):
  19.         print(2, end=' ')
  20.     else:
  21.         print(0, end=' ')