EduBrick

L. Проверка потенциалов

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

Потенциалы — способ избавиться от отрицательных весов. Если каждой вершине приписать число pvp_v и заменить вес ребра (u,v,w)(u, v, w) на

w′=w+pu−pv,w' = w + p_u - p_v,

то вес любого пути из aa в bb изменится ровно на pa−pbp_a - p_b — одинаково для всех путей. Значит, кратчайшие пути останутся кратчайшими. А если все новые веса окажутся неотрицательными, по такому графу можно пускать Дейкстру.

На этом стоит алгоритм Джонсона: посчитать потенциалы Фордом — Беллманом из фиктивной вершины, пересчитать веса и дальше запускать Дейкстру сколько угодно раз.

Здесь задача проще: потенциалы уже даны, надо лишь проверить, что все новые веса неотрицательны.

Проверка занимает один проход по рёбрам. Обратите внимание на переполнение: ww и потенциалы по модулю до 10910^9, так что w+pu−pvw + p_u - p_v может выйти за пределы 32-битного типа.

Формат ввода

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

Вторая строка — nn чисел pvp_v (∣pv∣≤109|p_v| \le 10^9).

Далее идут mm строк с рёбрами: начало, конец и вес (∣w∣≤109|w| \le 10^9).

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

Одно слово: YES, если все пересчитанные веса неотрицательны, и NO иначе.

Примеры

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