EduBrick

L. Построить потенциалы

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

Как классная задача L, но потенциалы надо не проверить, а построить.

Способ ровно один и он же — первый шаг алгоритма Джонсона: положить все pvp_v равными нулю и выполнить Форда — Беллмана. Это то же самое, что добавить фиктивную вершину с рёбрами нулевого веса во все остальные и посчитать от неё расстояния.

Полученные значения удовлетворяют pv≤pu+wp_v \le p_u + w для каждого ребра, а это и есть условие w+pu−pv≥0w + p_u - p_v \ge 0.

Если в графе есть отрицательный цикл, потенциалов не существует: вдоль цикла сумма пересчитанных весов равна сумме исходных, а она отрицательна, и неотрицательными все слагаемые быть не могут.

Чтобы ответ был единственным, зафиксируем: все pvp_v изначально нули, ровно n−1n - 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).

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

NO, если потенциалов не существует.

Иначе YES и во второй строке nn значений.

Примеры

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