EduBrick

K. Длиннейший путь в ациклическом графе

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

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

В общем графе длиннейший путь искать бесполезно: задача NP-полна, а с положительными циклами ответа просто нет. В ациклическом — считается за O(n+m)O(n + m).

Приём: топологическая сортировка плюс динамика. Перебираем вершины в топологическом порядке; к моменту, когда очередь доходит до vv, все входящие в неё рёбра уже обработаны:

best[v]=max⁡(u,v,w)(best[u]+w),best[1]=0.best[v] = \max_{(u,v,w)} (best[u] + w), \qquad best[1] = 0.

Вершины, недостижимые из первой, в переборе не участвуют — иначе они внесут в максимум мусор.

Это тот же приём, что мы применяли к конденсации во втором занятии по обходу в глубину, и он же — основа динамики по ациклическому графу вообще. Форда — Беллмана тут не нужно: ациклический граф разбирается быстрее.

Формат ввода

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

Далее идут mm строк с рёбрами: начало, конец и вес (−104≤w≤104-10^4 \le w \le 10^4). Граф ациклический; возможны кратные рёбра.

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

Одно число — наибольший вес пути из 1 в nn, или −1-1, если пути нет.

Примеры

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