Ctrl K

Ближайшая отмеченная вершина

Средняя
Дан ориентированный граф из n вершин с номерами от 0 до n - 1. Каждое ребро edges[i] = [u, v, w] ведёт из u в v и имеет вес w; между одной и той же парой вершин может быть несколько рёбер. Некоторые вершины отмечены флажком — их номера перечислены в flagged. Найдите длину кратчайшего пути из вершины start до любой отмеченной вершины. Если ни одна отмеченная вершина из start недостижима, верните -1.
Пример 1
n=4, edges=[[0, 1, 2], [1, 2, 2], [0, 3, 7], [2, 3, 1]], start=0, flagged=[3] → 5

Прямое ребро 0 → 3 весит 7, а путь 0 → 1 → 2 → 3 — всего 2 + 2 + 1 = 5.

Пример 2
n=3, edges=[[1, 0, 4]], start=0, flagged=[1, 2] → -1

Ребро ведёт из 1 в 0, а не обратно, так что из вершины 0 никуда не попасть.

Ограничения
  • 2 ≤ n ≤ 500
  • 1 ≤ len(edges) ≤ 10⁴
  • edges[i] = [u, v, w], 0 ≤ u, v < n, u ≠ v
  • 1 ≤ w ≤ 10⁶
  • 1 ≤ len(flagged) ≤ n − 1
  • 0 ≤ start, flagged[i] < n, все flagged[i] различны и не равны start
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКратчайший путь катящегося шарика СредняяСамый надёжный маршрут сообщения СредняяСувенир с возвращением СредняяПуть через туннели СредняяОстановки, которые закрываются Средняя
загружаем Python…
Вход
n=4, edges=[[0, 1, 2], [1, 2, 2], [0, 3, 7], [2, 3, 1]], start=0, flagged=[3]
Ожидается
5

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