EduBrick

C. Сам путь с отрицательными весами

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

Найдите кратчайший путь из вершины 1 в вершину nn и выведите его. Отрицательных циклов нет.

Массив предков здесь ненадёжен. С отрицательными весами рёбра «кратчайшего графа» не обязаны вести от меньшего расстояния к большему, а если в графе есть цикл нулевого веса, цепочка предков может замкнуться сама на себя — и восстановление зациклится.

Надёжнее считать по слоям. Пусть dk[v]d_k[v] — наименьший вес пути из вершины 1 в vv, использующего не более kk рёбер. Слои считаются друг из друга ровно одной фазой Форда — Беллмана, а восстановление идёт по убыванию номера слоя и потому обязано закончиться.

Чтобы ответ был единственным, зафиксируем:

  • среди кратчайших путей берётся тот, где рёбер меньше всего;
  • восстановление идёт от вершины nn: на слое kk ищется наименьшая вершина uu с ребром (u,v,w)(u, v, w), для которой dk−1[u]+w=dk[v]d_{k-1}[u] + w = d_k[v];
  • дальше переходим в uu и на слой k−1k-1.

Такая вершина всегда существует, а номер слоя строго убывает — значит, зацикливание невозможно.

Формат ввода

Первая строка содержит числа nn (1≤n≤1001 \le n \le 100) и mm (0≤m≤1040 \le m \le 10^4).

Далее идут mm строк с рёбрами: начало, конец и вес (−100≤w≤100-100 \le w \le 100).

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

Если пути нет — одно число −1-1.

Иначе в первой строке вес пути, во второй — количество вершин, в третьей — сам путь.

Примеры

ввод
4 4
1 2 10
2 3 -5
3 4 2
1 4 30
вывод
7
4
1 2 3 4
ввод
2 0
вывод
-1
Войдите, чтобы отправлять решения.