Ctrl K

Очередь на курсы

Средняя
В онлайн-школе n курсов с номерами от 0 до n - 1. Пара [a, b] в списке deps означает, что курс a можно начать только после того, как пройден курс b. Студенты проходят курсы через общую очередь: - в самом начале в очередь встают все курсы без требований, по возрастанию номера; - курсы проходятся по одному, всегда первый в очереди; - когда курс пройден, каждый курс, для которого это было последнее непройденное требование, встаёт в конец очереди; если таких несколько — по возрастанию номера. Верните номера курсов в том порядке, в котором они будут пройдены. Если пройти все n курсов так не получится, верните пустой список.
Пример 1
n=5, deps=[[3, 0], [1, 3], [4, 2], [1, 4]] → [0, 2, 3, 4, 1]

Сначала в очередь встают курсы без требований: 0 и 2. После курса 0 открывается 3, после курса 2 — 4. Курс 1 ждёт и 3, и 4, поэтому встаёт в очередь последним: 0, 2, 3, 4, 1.

Пример 2
n=4, deps=[[2, 1], [1, 2], [3, 0]] → []

Курсы 1 и 2 требуют друг друга, поэтому пройти все курсы нельзя — ответ пустой.

Пример 3
n=3, deps=[] → [0, 1, 2]
Ограничения
  • 1 ≤ n ≤ 2000
  • 0 ≤ len(deps) ≤ 5000
  • deps[i] = [a, b], 0 ≤ a, b < n, a ≠ b
  • Все пары в deps различны
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПорядок сборки модулей СредняяЛучшие корни дерева СредняяПути, которые всегда заканчиваются СредняяСамый длинный поход по лесу СредняяНужен ли этот шаг раньше Средняя
загружаем Python…
Вход
n=5, deps=[[3, 0], [1, 3], [4, 2], [1, 4]]
Ожидается
[0, 2, 3, 4, 1]

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