EduBrick

M. Одна дорога бесплатно

3000 мс · 256 МБ · всё или ничего

Дан неориентированный взвешенный граф. Ровно один раз за поездку разрешается проехать по дороге бесплатно — не обязательно пользоваться этим правом. Найдите наименьшую стоимость пути из вершины 1 в вершину nn.

Опять граф состояний, и вершина — пара «где я и потратил ли я бесплатный проезд».

переход цена
(v,0)→(u,0)(v, 0) \to (u, 0) по ребру веса ww ww
(v,0)→(u,1)(v, 0) \to (u, 1) по ребру веса ww 00
(v,1)→(u,1)(v, 1) \to (u, 1) по ребру веса ww ww

Вершин 2n2n, рёбер 3m3m, дальше — обычная Дейкстра. Ответ — наименьшее из двух состояний в вершине nn.

Такой приём называют слоями: граф копируется столько раз, сколько различных «положений дел» бывает, и переходы между слоями отвечают за расход ресурса. Слоёв может быть и больше двух — например, «разрешено kk бесплатных проездов» даёт k+1k + 1 слой.

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

Формат ввода

Первая строка содержит числа nn (1≤n≤1051 \le n \le 10^5) и mm (0≤m≤2⋅1050 \le m \le 2 \cdot 10^5).

Далее идут mm строк с рёбрами: концы и вес ww (0≤w≤1040 \le w \le 10^4).

Формат вывода

Одно число — наименьшая стоимость или −1-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
Войдите, чтобы отправлять решения.