QOJ.ac

QOJ

Time Limit: 3.0 s Memory Limit: 1024 MB Total points: 100

#15449. 财务

Statistics

明天(11 月 17 日)是“无债日”(Debt-Free Day)。在这个日子里,$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$ 个人能否商定转账的方向和金额,以完全结清所有债务——即让每个人的余额都变为零?对于 $t$ 个独立的测试用例,若可以则输出 TAK(是),否则输出 NIE(否)。

你可以假设每个人都有足够的资金来执行任何必要的转账。

输入格式

第一行包含一个整数 $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

样例

输入样例 1

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

输出样例 1

NIE
TAK
TAK

说明

在第一个测试用例中,有两个人的余额为 $a = (20, -20)$。第一个人应该向第二个人转账金额为 20 的资金,但最多只能转账 $c_1 = 10$。因此答案为 NIE(否)。

下图展示了第二个测试用例,其中顶点内写有余额 $a = (0, 1, 1, 1, -3)$,边上写有限制 $c_j$。

以下是两个合法的转账方案示例。在这两个方案中,均未超过转账限制,且每个人的最终余额都变为 0。因此答案为 TAK(是)。

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.