Universal Cup Judging System

Universal Cup

时间限制: 3.0 s 内存限制: 1024 MB 总分: 100
统计

Завтра (17 ноября) мы отмечаем День без долгов. По этому случаю $n$ друзей решили наконец рассчитаться по взаимным долгам, накопившимся за множество прошлых поездок. Они всегда записывали свои расходы в приложение, которое теперь всё просуммировало и упростило. Для каждого человека оно показывает итоговый баланс $a_i$ — положительный, если этому человеку должны деньги, или отрицательный, если этот человек должен вернуть деньги. Сумма всех показанных значений, разумеется, равна нулю: $\sum_{i=1}^n a_i = 0$. Мы хотим спланировать переводы (с целыми значениями) таким образом, чтобы баланс каждого человека стал равен нулю.

$n$ человек связаны $m$ отношениями доверия, описываемыми тройками $(u_j, v_j, c_j)$ — люди $u_j$ и $v_j$ доверяют друг другу достаточно, чтобы любой из них мог отправить другому один перевод на сумму не более $c_j$. Люди, не связанные напрямую отношением доверия, не могут переводить деньги друг другу. Неупорядоченные пары $\{u_j, v_j\}$ не повторяются, а вся сеть доверия связна — каждая пара людей соединена (возможно, многошаговым) путём из отношений доверия.

Приложение показывает общий долг $A$ (эквивалентно, сумму положительных значений $a_i$). В этой компании друзей уровень доверия довольно высок — для каждой пары, связанной отношением доверия, выполняется $c_j \ge \lceil \frac{A}{2} \rceil$.

Например, для последовательности $a = (10, -5, 0, 3, -4, -4)$ имеем $A = 5 + 4 + 4 = 10 + 3 = 13$, следовательно, $c_j \ge 7$.

Может ли эта группа из $n$ человек договориться о направлениях и суммах переводов так, чтобы полностью погасить все долги — то есть сделать баланс каждого равным нулю? Выведите TAK (да) или NIE (нет) для каждого из $t$ независимых наборов входных данных.

Можно считать, что у каждого человека достаточно денег для совершения любых необходимых переводов.

Входные данные

Первая строка содержит целое число $t$ ($1 \le t \le 10^5$), обозначающее количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа $n$ и $m$ ($2 \le n \le 10^6$; $n - 1 \le m \le 10^6$), представляющих соответственно количество людей и количество отношений доверия.

Вторая строка каждого набора входных данных содержит $n$ целых чисел $a_1, a_2, \dots, a_n$ ($-10^9 \le a_i \le 10^9$; $\sum_{i=1}^n a_i = 0$), представляющих начальный баланс каждого человека. Хотя бы одно из чисел $a_i$ отлично от нуля.

Определим $A = \sum_{i=1}^n \max(0, a_i)$. Из предыдущего условия следует, что $A \ge 1$.

Следующие $m$ строк описывают отношения доверия; $j$-я строка содержит три целых числа $u_j$, $v_j$ и $c_j$ ($1 \le u_j, v_j \le n$; $u_j \ne v_j$; $\lceil \frac{A}{2} \rceil \le c_j \le 10^{15}$). Сеть из $n$ человек и $m$ отношений доверия связна, и каждая неупорядоченная пара $\{u, v\}$ встречается в данном наборе входных данных не более одного раза.

Сумма всех значений $n$ по всем наборам входных данных не превышает $10^6$; аналогично, сумма всех значений $m$ не превышает $10^6$.

Выходные данные

Выведите $t$ строк — для каждого набора входных данных выведите слово TAK, если можно сбалансировать все счета, или слово NIE в противном случае.

Пример

Входные данные

3
2 1
20 -20
1 2 10
5 6
0 1 1 1 -3
1 2 2
2 3 3
3 4 5
2 4 7
1 5 2
4 5 2
3 2
1 2 -3
1 2 1000000000000000
2 3 999997235527681

Выходные данные

NIE
TAK
TAK

Примечание

В первом наборе входных данных есть два человека с балансами $a = (20, -20)$. Первый человек должен отправить второму перевод на сумму 20, но может отправить не более $c_1 = 10$. Ответ — NIE (нет).

На рисунке ниже проиллюстрирован второй набор входных данных, где балансы $a = (0, 1, 1, 1, -3)$ записаны внутри вершин, а ограничения $c_j$ — на рёбрах.

problem_15449_adb392a3a9abf1d6c802956eb4dd0007.png

Ниже приведены два примера допустимых планов переводов. В обоих планах ограничения на переводы не превышены, и у всех итоговый баланс становится равным 0. Ответ — TAK (да).

problem_15449_6e3176992e0219f15937e2ecc06bf307.png

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.