Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Родословная: подсчет уровней
- n = int(input()) # кол. вводимых пар
- A = [tuple(input().split()) for i in range(n-1)] # здесь находятся пары (предок, потомок)
- now_man = A[0][1]
- now_deep = 0
- B = {(0, now_man)} # здесь будут храниться все люди с их глубиной нахождения (глубина, человек)
- no_child_mans = [] # люди, у которых нет непроверенных потомков
- while True: # главный цикл
- have_parent_flag, have_child_flag = False, False
- if now_man not in no_child_mans: # эта проверка нужна, если мы перешли на уровень назад
- for para in A: # в этом цикле я ищу потомков, которых я не проверял
- if para[1] == now_man and para[0] not in no_child_mans:
- now_deep += 1
- now_man = para[0]
- B.add((now_deep, now_man))
- have_parent_flag = True # True - есть потомок, False - нет
- break
- if not have_parent_flag: # если нет потомков, которых я не проверял
- now_deep -= 1 # иду на уровень назад
- no_child_mans.append(now_man) # добавляю человека в список людей, у которых я проверил всех потомков
- for para in A: # в этом цикле ищу его предка
- if para[0] == now_man:
- now_man = para[1]
- have_child_flag = True
- break
- else: # если есть потомки
- continue
- if not have_child_flag: # а если предков нет, то выхожу из главного цикла
- break
- min_deep = 0 # самый первый now_man, которого мы взяли не обязательно был родоначальником
- for para in B: # здесь я ищу минимальную глубину
- if para[0] < min_deep:
- min_deep = para[0]
- B = sorted(list(B), key=lambda x: x[1]) # сортирую по имени
- for man_data in B:
- print(man_data[1], man_data[0] + min_deep) # вывожу на экран
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement