QOJ.ac

QOJ

Time Limit: 5 s - 10 s Memory Limit: 1024 MB Total points: 27

#12474. 连锁反应

Statistics

Wile 独自住在沙漠里,他通过建造复杂的连锁反应机器来娱乐自己。每台机器由 $N$ 个模块组成,编号为 $1, 2, \dots, N$。每个模块可以指向另一个编号更小的模块。如果不指向任何模块,则指向深渊。

没有被任何其他模块指向的模块称为“启动器”(initiators)。Wile 可以手动触发启动器。当一个模块被触发时,它会触发它所指向的模块(如果有的话),该模块又可能触发第三个模块(如果它指向一个模块),依此类推,直到链条到达深渊或一个已经被触发的模块。这被称为连锁反应。

每个模块都有一个“乐趣因子” $F_i$。Wile 从一次连锁反应中获得的乐趣是该连锁反应中所有被触发模块的乐趣因子中的最大值。Wile 将按某种顺序依次触发每个启动器模块一次。Wile 在本次会话中获得的总体乐趣是他从每次连锁反应中获得的乐趣之和。

例如,假设 Wile 有 4 个模块,乐趣因子分别为 $F_1 = 60, F_2 = 20, F_3 = 40, F_4 = 50$,其中模块 1 指向深渊,模块 2 和 3 指向模块 1,模块 4 指向模块 2。有两个启动器(3 和 4),Wile 必须按某种顺序触发它们。

如上所述,如果 Wile 先手动触发模块 4,模块 4、2 和 1 将在同一次连锁反应中被触发,乐趣为 $\max(50, 20, 60) = 60$。然后,当 Wile 触发模块 3 时,模块 3 将单独被触发(模块 1 不能再次被触发),乐趣为 40,本次会话的总乐趣为 $60 + 40 = 100$。

然而,如果 Wile 先手动触发模块 3,模块 3 和 1 将在同一次连锁反应中被触发,乐趣为 $\max(40, 60) = 60$。然后,当 Wile 触发模块 4 时,模块 4 和 2 将在同一次连锁反应中被触发,乐趣为 $\max(50, 20) = 50$,本次会话的总乐趣为 $60 + 50 = 110$。

给定乐趣因子和模块的设置,计算 Wile 以最佳顺序触发启动器时能获得的最大乐趣。

输入格式

输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例,每个测试用例由 3 行描述。每个测试用例的第一行包含一个整数 $N$,即 Wile 拥有的模块数量。第二行包含 $N$ 个整数 $F_1, F_2, \dots, F_N$,其中 $F_i$ 是第 $i$ 个模块的乐趣因子。第三行包含 $N$ 个整数 $P_1, P_2, \dots, P_N$。如果 $P_i = 0$,则意味着模块 $i$ 指向深渊。否则,模块 $i$ 指向模块 $P_i$。

输出格式

对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是 Wile 通过以最佳顺序手动触发启动器所能获得的最大乐趣。

数据范围

$1 \le T \le 100$。 $1 \le F_i \le 10^9$。 $0 \le P_i \le i - 1$,对于所有 $i$。

样例

样例输入 1

3
4
60 20 40 50
0 1 1 2
5
3 2 1 4 5
0 1 1 1 0
8
100 100 100 90 80 100 90 100
0 1 2 1 2 3 1 3

样例输出 1

Case #1: 110
Case #2: 14
Case #3: 490

说明

样例 #1 即为题目描述中解释的例子。

在样例 #2 中,有 4 个启动器(模块 2 到 5),因此有 4 次连锁反应。按 3, 5, 4, 2 的顺序激活它们会产生乐趣分别为 3, 5, 4, 2 的链条,总乐趣为 14。注意,我们是将输入中最高的四个乐趣数字相加,因此没有办法获得比这更多的乐趣。

在样例 #3 中,启动器的一种最优激活顺序是 4, 5, 7, 6, 8。

Figure 1. 模块连接示意图,展示了模块 1 指向深渊,模块 2 和 3 指向模块 1,模块 4 指向模块 2。

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.