M. Одна дорога бесплатно
Дан неориентированный взвешенный граф. Ровно один раз за поездку разрешается проехать по дороге бесплатно — не обязательно пользоваться этим правом. Найдите наименьшую стоимость пути из вершины 1 в вершину .
Опять граф состояний, и вершина — пара «где я и потратил ли я бесплатный проезд».
| переход | цена |
|---|---|
| по ребру веса | |
| по ребру веса | |
| по ребру веса |
Вершин , рёбер , дальше — обычная Дейкстра. Ответ — наименьшее из двух состояний в вершине .
Такой приём называют слоями: граф копируется столько раз, сколько различных «положений дел» бывает, и переходы между слоями отвечают за расход ресурса. Слоёв может быть и больше двух — например, «разрешено бесплатных проездов» даёт слой.
Что важно не перепутать: бесплатный проезд обнуляет вес ребра, а не пропускает вершину. И воспользоваться им можно не более одного раза за всю поездку, а не один раз в каждой вершине.
Формат ввода
Первая строка содержит числа () и ().
Далее идут строк с рёбрами: концы и вес ().
Формат вывода
Одно число — наименьшая стоимость или .
Примеры
4 4 1 2 1 2 3 2 3 4 5 4 1 4
0
3 2 1 2 100 2 3 100
100