Путь с заправками

Просмотр в формате PDF

Submit solution


Очки: 190
Ограничение по времени: 2.0s
Ограничение по памяти: 256M

Автор:
Problem types
Allowed languages
C++, Python

Дальнобойщик едет по сети дорог, состоящей из n городов и m двусторонних дорог между ними. Для проезда по каждой дороге требуется ровно w литров топлива.

Грузовик имеет бак объёма C литров, и в баке не может быть больше топлива, чем C.

Некоторые города оборудованы заправками. Если дальнобойщик приезжает в такой город, бак сразу полностью заполняется до C литров.

В начале маршрута водитель находится в городе s с полным баком и хочет добраться до города t.

Требуется определить минимальное суммарное количество топлива, которое будет израсходовано в пути. Иными словами, нужно минимизировать сумму значений w по всем дорогам маршрута. Автоматические дозаправки в городах с заправками не добавляют ничего к ответу, они лишь восстанавливают бак до полного.

Если добраться из s в t невозможно, выведите -1.

Входные данные

Первая строка содержит три целых числа n, m, C — количество городов, количество дорог и объём бака.

Вторая строка содержит два целых числа s, t — начальный и конечный города.

Третья строка содержит целое число r — количество городов с заправками, затем r целых чисел — номера этих городов.

Каждая из следующих m строк содержит по три целых числа u, v, w — описание дороги между городами u и v, для проезда по которой требуется w литров топлива.

Выходные данные

Выведите одно целое число — минимальное суммарное количество израсходованного топлива, необходимое, чтобы добраться из s в t, либо -1, если это невозможно.

Ограничения

  • 2 <= n <= 50000
  • 0 <= m <= 200000
  • 1 <= C <= 1000
  • 1 <= s, t <= n
  • 0 <= r <= n
  • 1 <= u, v <= n
  • 1 <= w <= C

Примеры

Пример 1

Входные данные

2 1 5
1 2
0
1 2 3

Выходные данные

3
Пример 2

Входные данные

3 3 4
1 3
1 2
1 2 4
2 3 4
1 3 4

Выходные данные

4

Комментарии

Еще нет ни одного комментария.