L. Построить потенциалы
Как классная задача L, но потенциалы надо не проверить, а построить.
Способ ровно один и он же — первый шаг алгоритма Джонсона: положить все равными нулю и выполнить Форда — Беллмана. Это то же самое, что добавить фиктивную вершину с рёбрами нулевого веса во все остальные и посчитать от неё расстояния.
Полученные значения удовлетворяют для каждого ребра, а это и есть условие .
Если в графе есть отрицательный цикл, потенциалов не существует: вдоль цикла сумма пересчитанных весов равна сумме исходных, а она отрицательна, и неотрицательными все слагаемые быть не могут.
Чтобы ответ был единственным, зафиксируем: все изначально нули, ровно фаз, рёбра в порядке ввода, при отсутствии изменений останавливаемся.
Формат ввода
Первая строка содержит числа () и ().
Далее идут строк с рёбрами: начало, конец и вес ().
Формат вывода
NO, если потенциалов не существует.
Иначе YES и во второй строке значений.
Примеры
3 3 1 2 5 2 3 -2 3 1 -1
YES -3 0 -2
2 2 1 2 -1 2 1 -1
NO