Ctrl K

Остановить ветку процессов

Средняя
В системе работают n процессов, и они образуют дерево: у каждого процесса, кроме одного корневого, есть родитель — процесс, который его запустил. ids[i] — номер i-го процесса, parents[i] — номер его родителя; у корневого процесса parents[i] = 0. Когда процесс останавливают, вместе с ним останавливаются все его дети, их дети и так далее. Верните номера всех процессов, которые остановятся, если остановить процесс target. Порядок не важен.
Пример 1
ids=[4, 8, 2, 6, 9], parents=[0, 4, 4, 8, 8], target=8 → [8, 6, 9]

Процесс 8 запустил 6 и 9, поэтому остановятся 8, 6 и 9. Процессы 4 и 2 продолжат работу.

Пример 2
ids=[3, 1, 5], parents=[5, 3, 0], target=5 → [5, 3, 1]

5 — корень всего дерева, поэтому останавливается всё.

Пример 3
ids=[7], parents=[0], target=7 → [7]
Ограничения
  • 1 ≤ n = len(ids) = len(parents) ≤ 5·10⁴
  • 1 ≤ ids[i] ≤ 5·10⁴, все номера различны
  • 0 ≤ parents[i] ≤ 5·10⁴
  • Ровно у одного процесса parents[i] = 0, связи образуют дерево
  • target есть среди ids
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиНаименьшая общая территория СредняяОткрытые комнаты от холла СредняяДерево по столбцам СредняяСуммы путей в закодированном дереве СредняяСклеить карточки контактов Средняя
загружаем Python…
Вход
ids=[4, 8, 2, 6, 9], parents=[0, 4, 4, 8, 8], target=8
Ожидается
[8, 6, 9]

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