Ctrl K

План задач по командам

Сложная
Есть n задач с номерами от 0 до n - 1 и m команд с номерами от 0 до m - 1. Задача i закреплена за командой team[i], а если team[i] = -1, то ни за какой. У команды может не быть ни одной задачи. after[i] — список задач, которые должны стоять в плане раньше задачи i (не обязательно непосредственно перед ней). Составьте план — порядок всех n задач, в котором: - для каждой задачи все задачи из after[i] идут раньше неё; - задачи одной команды стоят подряд, без вкраплений чужих задач. Верните план. Если такого плана нет, верните пустой список. Гарантируется, что если план существует, то он единственный.
Пример 1
n=4, m=1, team=[0, -1, 0, -1], after=[[3], [2], [0], []] → [3, 0, 2, 1]

Задача 3 открывает путь задаче 0, за ней в той же команде идёт задача 2, и только потом задача 1. Команда 0 (задачи 0 и 2) идёт подряд.

Пример 2
n=3, m=1, team=[0, -1, 0], after=[[], [0], [1]] → []

Задача 1 ждёт задачу 0, а задача 2 ждёт задачу 1. Значит, задача 1 должна оказаться между двумя задачами команды 0 — команда разорвётся, поэтому ответ пустой.

Пример 3
n=3, m=2, team=[1, 1, 0], after=[[2], [0], []] → [2, 0, 1]
Ограничения
  • 1 ≤ m ≤ n ≤ 3 · 10⁴
  • len(team) = len(after) = n
  • -1 ≤ team[i] ≤ m - 1
  • 0 ≤ after[i][j] ≤ n - 1, after[i][j] ≠ i
  • В каждом after[i] номера различны
  • Подходящих планов либо нет, либо ровно один
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПорядок букв по словарю СложнаяСамый длинный подъём по карте СложнаяПрогулки только в гору СложнаяСамая длинная петля переходов СложнаяДонести новость до всех Сложная
загружаем Python…
Вход
n=4, m=1, team=[0, -1, 0, -1], after=[[3], [2], [0], []]
Ожидается
[3, 0, 2, 1]

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