EduBrick

O. Самый короткий отрицательный цикл

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

Найдите наименьшее количество рёбер в цикле отрицательного веса.

Форд — Беллман отвечает на вопрос «есть ли такой цикл», но про его длину ничего не говорит. Нужна другая динамика — по числу рёбер.

Пусть fk[i][j]f_k[i][j] — наименьший вес маршрута из ii в jj ровно из kk рёбер (вершины могут повторяться). Тогда

fk+1[i][j]=min⁡t(fk[i][t]+w(t,j)),f_{k+1}[i][j] = \min_t \left(f_k[i][t] + w(t, j)\right),

а отрицательный цикл из kk рёбер существует тогда и только тогда, когда fk[i][i]<0f_k[i][i] < 0 для какого-нибудь ii.

Перебираем kk от 1 до nn и отвечаем на первом же, где нашлось. Дальше nn идти незачем: цикл минимальной длины не повторяет вершин, значит рёбер в нём не больше nn.

Стоимость одного шага — O(n3)O(n^3), всего O(n4)O(n^4). При n≤60n \le 60 это тринадцать миллионов операций.

Заметьте, что маршрут из kk рёбер с повторами — это нормально: если он замкнут и имеет отрицательный вес, внутри него обязательно найдётся отрицательный простой цикл, и он не длиннее. Поэтому наименьшее kk, на котором диагональ ушла в минус, и есть ответ.

Формат ввода

Первая строка содержит числа nn (1≤n≤601 \le n \le 60) и mm (0≤m≤20000 \le m \le 2000).

Далее идут mm строк с рёбрами: начало, конец и вес (∣w∣≤1000|w| \le 1000). Возможны кратные рёбра и петли.

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

Одно число — наименьшее количество рёбер в отрицательном цикле, или −1-1, если такого цикла нет.

Примеры

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