QOJ.ac

QOJ

时间限制: 2.0 s 内存限制: 1024 MB 总分: 100 可 Hack ✓

#18609. Хорошие раскраски — 8

统计

Ildar 决定从事抽象艺术创作。作为画作的基础,他选择了一棵有 $n$ 个顶点的有根树:一个无环图,其中顶点 1 被指定为根。根没有父节点,对于任意其他顶点 $u \ge 2$,从 $u$ 到根的路径上的第一个顶点称为顶点 $u$ 的父节点,记作 $p_u$。父节点为 $v$ 的顶点称为 $v$ 的子节点。如果一个顶点没有子节点,则称为叶子。保证根至少有两个子节点。

让我们对这棵树执行深度优先搜索(DFS):先访问根,然后按相同的方式递归访问其每个子节点的子树。树的顶点按照此次深度优先搜索的顺序编号。因此,对于每个 $i$ 从 1 到 $n$,顶点 $i$ 子树中的顶点编号构成一组连续的整数。

假设树有 $m$ 个叶子。Ildar 将它们按递增顺序写下,得到序列 $l_1 < l_2 < \dots < l_m$,然后连接所有形如 $(l_j, l_{j+1})$ 的叶子对,同时连接 $l_m$ 和 $l_1$。添加到图中的环 $l_1 \to l_2 \to \dots \to l_m \to l_1$ 称为外环

Ildar 将得到的图在平面上绘制如下:他将外环画成一个圆,叶子 $l_1, l_2, \dots, l_m$ 沿圆逆时针排列,圆上相邻顶点之间的弧表示外环的边。树的其他顶点用位于该圆内部的不同点表示。树的边用顶点之间的线段表示,并且顶点和边的位置使得边线段之间没有公共内点。下图展示了一个树的绘制示例。

在 Ildar 的画作中,外环圆内部的平面部分被图的边划分为 $m$ 个区域。我们将这些区域称为。如果两个不同的面共享一条公共边,则称它们相邻。例如,上图中一共有 5 个面,我们将其记为 $\Gamma_1, \Gamma_2, \Gamma_3, \Gamma_4$ 和 $\Gamma_5$。

上图中相邻的面有 $(\Gamma_1, \Gamma_2)$、$(\Gamma_1, \Gamma_5)$、$(\Gamma_2, \Gamma_3)$、$(\Gamma_2, \Gamma_4)$、$(\Gamma_2, \Gamma_5)$、$(\Gamma_3, \Gamma_4)$ 和 $(\Gamma_4, \Gamma_5)$。

为了完成画作,Ildar 计划用 $k$ 种颜色中的一种给每个面染色。如果一个染色方案中相邻的面颜色不同,则称之为合法染色。Ildar 将他的画作的潜力定义为合法染色方案数除以 $10^9 + 7$ 的余数。

在评估初始画作的潜力之后,Ildar 对已绘制图的边执行 $q$ 次操作。考虑第 $i$ 次操作,由数字 $v_i$ 指定,作用于连接顶点 $v_i$ 和 $p_{v_i}$ 的树边。如果这条边当前在图中,Ildar 将其从图中移除;如果这条边不在图中,则重新绘制它。每次更改后,图中的面集可能会发生变化:移除一条边时两个面可能合并,或者绘制一条边时一个面可能分裂为两个。例如,在上图中移除边 $8 - 9$ 后,面 $\Gamma_4$ 和 $\Gamma_5$ 将合并为一个面 $\Gamma_{4+5}$。

此时图中相邻的面为 $(\Gamma_1, \Gamma_2)$、$(\Gamma_1, \Gamma_{4+5})$、$(\Gamma_2, \Gamma_3)$、$(\Gamma_2, \Gamma_{4+5})$ 和 $(\Gamma_3, \Gamma_{4+5})$。

在每次操作之后,需要再次计算画作的潜力:使用至多 $k$ 种颜色给面进行合法染色的方案数除以 $10^9 + 7$ 的余数。

输入格式

输入的第一行包含一个整数 $t$ ($1 \le t \le 10\,000$) — 测试用例的数量。接下来是 $t$ 个测试用例的描述。

每个测试用例的第一行包含三个整数 $n$、$k$ 和 $q$ ($3 \le n \le 10^6$,$2 \le k \le 10^9$,$0 \le q \le 300\,000$) — 树的顶点数、可用颜色数和执行的操作数。

每个测试用例的第二行包含数字 $p_2, p_3, \dots, p_n$ ($1 \le p_i < i$),其中 $p_i$ 是树中顶点 $i$ 的父节点。保证树的顶点按照深度优先搜索的顺序编号,且在 $p_2, \dots, p_n$ 中,值 1 至少出现两次。

接下来有 $q$ 行,第 $i$ 行包含数字 $v_i$ ($2 \le v_i \le n$) — 第 $i$ 次操作的参数。

保证所有测试用例的 $n$ 之和不超过 $10^6$。

保证所有测试用例的 $q$ 之和不超过 $300\,000$。

输出格式

对于每个测试用例,输出 $q + 1$ 个整数,第一个必须等于初始画作的潜力,其余必须等于每次操作后画作的潜力。

子任务

定义树的高度为从根到任意其他顶点的简单路径上边的最大数量。

子任务 分数 $n$ $k$ $q$ 附加限制 所需子任务
1 6 $n = 3$ $k \le 4$ $q \le 10$ $t \le 100$,$p_2 = p_3 = 1$
2 9 $\sum n \le 1000$ $q = 0$ $p_i = 2 \cdot \lfloor \frac{i}{2} \rfloor - 1$,$n$ 为奇数
3 10 $\sum n \le 1000$ $\sum q \le 1000$ $p_i = 1$ 1
4 4 $n \le 9$ $k \le 4$ $q = 0$ $t \le 100$
5 3 $n \le 9$ $k \le 4$ $q \le 10$ $t \le 100$ 自身, 4
6 2 $\sum n \le 1000$ $k = 2$ $q = 0$
7 11 $\sum n \le 1000$ $q = 0$ 2, 4, 6
8 15 $\sum n \le 1000$ $\sum q \le 1000$ 自身, 1–7
9 4 $\sum n \le 5000$ $\sum q \le 5000$ 自身, 1–8
10 3 $\sum n \le 10\,000$ $\sum q \le 10\,000$ 自身, 1–9
11 6 $\sum n \le 100\,000$ $\sum q \le 5000$ 自身, 1–9
12 7 $\sum n \le 100\,000$ $\sum q \le 100\,000$ 高度至多 20 自身, 1, 4, 5
13 14 $\sum n \le 100\,000$ $\sum q \le 100\,000$ 自身, 1–12
14 3 $\sum n \le 300\,000$ $\sum q \le 300\,000$ 自身, 1–13
15 3 $\sum n \le 1\,000\,000$ $\sum q \le 300\,000$ 自身, 1–14

样例

样例输入 1

2
3 4 5
1 1
2
3
2
3
3
9 4 8
1 2 2 1 5 5 1 8
9
8
3
5
4
3
9
8

样例输出 1

12
4
4
4
12
4
96
48
48
24
12
12
12
12
36

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.