Universal Cup Judging System

Universal Cup

実行時間制限: 3.0 s メモリ制限: 1024 MB 満点: 100
統計

Jutro (17 listopada) obchodzimy Dzień bez Długów. Z tej okazji $n$ znajomych postanowiło wreszcie rozliczyć swoje wzajemne długi z wielu wspólnych wyjazdów. Zawsze zapisywali wydatki w aplikacji, która teraz wszystko podsumowała i uprościła. Dla każdej osoby wyświetla ona łączny bilans $a_i$ — dodatni, jeśli tej osobie należy się zwrot pieniędzy, lub ujemny, jeśli ta osoba musi oddać pieniądze. Suma wszystkich wyświetlanych wartości jest oczywiście równa zeru: $\sum_{i=1}^n a_i = 0$. Chcemy zaplanować przelewy (o wartościach całkowitych) w taki sposób, aby bilans każdej osoby stał się równy zero.

$n$ osób jest połączonych $m$ relacjami zaufania, opisanymi trójkami $(u_j, v_j, c_j)$ — osoby $u_j$ oraz $v_j$ ufają sobie na tyle, że każda z nich może wysłać drugiej jeden przelew o wartości co najwyżej $c_j$. Osoby niepołączone bezpośrednio relacją zaufania nie mogą przesyłać sobie pieniędzy. Nieuporządkowane pary $\{u_j, v_j\}$ nie powtarzają się, a cała sieć zaufania jest spójna — każda para osób jest połączona (być może wieloetapową) ścieżką relacji zaufania.

Aplikacja wyświetla łączny dług $A$ (równoważnie: sumę dodatnich wartości $a_i$). W tej grupie znajomych poziom zaufania jest dość wysoki — dla każdej pary połączonej relacją zaufania zachodzi $c_j \ge \lceil \frac{A}{2} \rceil$.

Na przykład dla ciągu $a = (10, -5, 0, 3, -4, -4)$ mamy $A = 5 + 4 + 4 = 10 + 3 = 13$, a zatem $c_j \ge 7$.

Czy ta grupa $n$ osób może ustalić kierunki i kwoty przelewów tak, aby w pełni rozliczyć wszystkie długi — to znaczy sprawić, by bilans każdego wynosił zero? Wypisz TAK lub NIE dla każdego z $t$ niezależnych przypadków testowych.

Możesz założyć, że każda osoba ma wystarczająco dużo pieniędzy, aby wykonać dowolne potrzebne przelewy.

Wejście

Pierwszy wiersz zawiera liczbę całkowitą $t$ ($1 \le t \le 10^5$), oznaczającą liczbę przypadków testowych.

Pierwszy wiersz każdego przypadku testowego zawiera dwie liczby całkowite $n$ oraz $m$ ($2 \le n \le 10^6$; $n - 1 \le m \le 10^6$), oznaczające odpowiednio liczbę osób oraz liczbę relacji zaufania.

Drugi wiersz każdego przypadku testowego zawiera $n$ liczb całkowitych $a_1, a_2, \dots, a_n$ ($-10^9 \le a_i \le 10^9$; $\sum_{i=1}^n a_i = 0$), reprezentujących początkowy bilans każdej osoby. Co najmniej jedna z liczb $a_i$ jest niezerowa.

Definiujemy $A = \sum_{i=1}^n \max(0, a_i)$. Z poprzedniego warunku wynika, że $A \ge 1$.

Kolejne $m$ wierszy opisuje relacje zaufania; $j$-ty wiersz zawiera trzy liczby całkowite $u_j$, $v_j$ oraz $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}$). Sieć $n$ osób i $m$ relacji zaufania jest spójna, a każda nieuporządkowana para $\{u, v\}$ pojawia się w danym przypadku testowym co najwyżej raz.

Suma wszystkich wartości $n$ we wszystkich przypadkach testowych nie przekracza $10^6$; podobnie suma wszystkich wartości $m$ nie przekracza $10^6$.

Wyjście

Wypisz $t$ wierszy — dla każdego przypadku testowego wypisz słowo TAK, jeśli można wyrównać wszystkie rachunki, lub słowo NIE w przeciwnym razie.

Przykład

Wejście

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

Wyjście

NIE
TAK
TAK

Uwaga

W pierwszym przypadku testowym są dwie osoby o bilansach $a = (20, -20)$. Pierwsza osoba powinna wysłać drugiej przelew o wartości 20, ale może wysłać co najwyżej $c_1 = 10$. Odpowiedź to NIE.

Rysunek poniżej ilustruje drugi przypadek testowy z bilansami $a = (0, 1, 1, 1, -3)$ wpisanymi wewnątrz wierzchołków oraz limitami $c_j$ na krawędziach.

problem_15449_adb392a3a9abf1d6c802956eb4dd0007.png

Poniżej przedstawiono dwa przykładowe poprawne plany przelewów. W obu planach limity przelewów nie są przekroczone i każdy kończy z bilansem 0. Odpowiedź to 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.