Ctrl K

Первая пропущенная метка в каждом поддереве

Сложная
Дано дерево из n узлов с номерами от 0 до n − 1, корень — узел 0. Массив parents задаёт родителей: parents[i] — родитель узла i, а у корня parents[0] = -1. У каждого узла есть метка — положительное целое labels[i], все метки разные. Для каждого узла i найдите наименьшее положительное целое число, которого нет среди меток его поддерева. Поддерево узла — это сам узел и все его потомки. Верните массив из n таких чисел.
Пример 1
parents=[-1, 0, 0, 1], labels=[2, 1, 4, 3] → [5, 2, 1, 1]

В поддереве корня метки 1, 2, 3, 4 — первой не хватает 5. У узла 1 есть метки 1 и 3, нет 2. Узлы 2 и 3 — листья без метки 1, их ответ 1.

Пример 2
parents=[-1, 0, 1], labels=[3, 4, 5] → [1, 1, 1]

Метки 1 нет ни у кого, поэтому у каждого поддерева первой не хватает именно 1.

Пример 3
parents=[-1, 2, 0, 2], labels=[4, 1, 2, 3] → [5, 2, 4, 1]
Ограничения
  • 2 ≤ n ≤ 10⁵, len(parents) = len(labels) = n
  • parents[0] = -1, для остальных 0 ≤ parents[i] < n; массив задаёт корректное дерево
  • 1 ≤ labels[i] ≤ 10⁵, все метки различны
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый тяжёлый путь в дереве СложнаяСуммарные расстояния в дереве дорог СложнаяМинимум охранников на дереве СложнаяСамое тяжёлое поддерево поиска СложнаяДругие порядки для того же дерева поиска Сложная
загружаем Python…
Вход
parents=[-1, 0, 0, 1], labels=[2, 1, 4, 3]
Ожидается
[5, 2, 1, 1]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 36 тестов на сервере, включая скрытые.