#loj5760. 「ROI 2026 Day2」优美染色 - 8

「ROI 2026 Day2」优美染色 - 8

#5760. 「ROI 2026 Day2」优美染色 - 8

标签: 传统 | 时间限制: 2000 ms | 内存限制: 1024 MiB |

题目描述

译自 ROI 2026 Day2 T4. Хорошие раскраски – 8

Ildar 决定投身于抽象艺术创作。他选择了一棵拥有 nn 个顶点的有根树作为画作的基础:这是一个无环连通图,其中 11 号顶点被指定为。根节点没有父节点,而对于任何其他顶点 u2u \ge 2,从 uu 到根的路径上的第一个顶点被称为顶点 uu父节点,记作 pup_u。以顶点 vv 为父节点的顶点被称为 vv子节点。如果没有子节点的顶点,则被称为叶子节点。题目保证根节点至少有两个子节点。

我们对这棵树进行深度优先搜索(DFS):首先访问根节点,然后依次递归地以相同方式访问其子节点的子树。树中的顶点按照这种深度优先搜索的顺序进行编号。因此,对于每个 11nn 之间的 ii,顶点 ii 的子树中的所有顶点编号构成了一组连续的整数。

假设树中有 mm 个叶子节点。Ildar 将这些叶子节点的编号按升序排列,得到序列 l1<l2<<lml_1 < l_2 < \dots < l_m。他将所有形式为 (lj,lj+1)(l_j, l_{j + 1}) 的叶子节点对用边连接起来,并连接顶点 lml_ml1l_1。图中新增加的这个环 l1l2lml1l_1 \to l_2 \to \dots \to l_m \to l_1 被称为外层循环

Ildar 在平面上绘制了得到的图:他将外层循环画成一个圆,叶子节点 l1,l2,,lml_1, l_2, \dots, l_m 沿圆周按逆时针方向排列,相邻顶点之间的圆弧表示外层循环的边。树的其他顶点被描绘为圆内的不同点。树的边由顶点之间的线段表示,且顶点和边的布局使得所有表示边的线段在内部没有公共交点。下图展示了一个树的绘图示例。

图片下载失败URL:https://img.loj.ac.cn/2026/06/24/4532f2f16f9a0.svg

在 Ildar 的画作中,外层循环圆圈内部的平面部分被图的边划分为 mm 个区域。我们将这些区域称为。若两个不同的面拥有一条公共边,则称它们是相邻的。例如,在上图中共有 55 个面,分别记为 Γ1,Γ2,Γ3,Γ4\Gamma_1, \Gamma_2, \Gamma_3, \Gamma_4Γ5\Gamma_5

图片下载失败URL:https://img.loj.ac.cn/2026/06/24/943c9b0a6cbd9.svg

在上图中,相邻的面有 (Γ1,Γ2)(\Gamma_1, \Gamma_2)(Γ1,Γ5)(\Gamma_1, \Gamma_5)(Γ2,Γ3)(\Gamma_2, \Gamma_3)(Γ2,Γ4)(\Gamma_2, \Gamma_4)(Γ2,Γ5)(\Gamma_2, \Gamma_5)(Γ3,Γ4)(\Gamma_3, \Gamma_4)(Γ4,Γ5)(\Gamma_4, \Gamma_5)

为了完成画作,Ildar 计划用 kk 种颜色之一为每个面着色。如果相邻的面涂有不同的颜色,则称该染色方案是正确的。Ildar 将其画作的潜力值定义为正确染色方案总数对 109+710^9+7 取模后的余数。

在评估了原始画作的潜力值后,Ildar 对图中的边执行了 qq 次操作。第 ii 次操作由一个数字 viv_i 指定,针对连接顶点 viv_ipvip_{v_i} 的树边。若该边当前存在于图中,则 Ildar 将其从画中删除;若该边当前不存在,则将其重新画出。每次修改后,图中的面集合可能会发生变化:删除一条边时两个面可能会合并,而画出一条边时一个面可能会分裂成两个。例如,若在上图中删除边 898-9,则面 Γ4\Gamma_4Γ5\Gamma_5 将合并为一个面 Γ4+5\Gamma_{4+5}

图片下载失败URL:https://img.loj.ac.cn/2026/06/24/12b32a64eaa25.svg

此时,图中相邻的面变为 (Γ1,Γ2)(\Gamma_1, \Gamma_2)(Γ1,Γ4+5)(\Gamma_1, \Gamma_{4+5})(Γ2,Γ3)(\Gamma_2, \Gamma_3)(Γ2,Γ4+5)(\Gamma_2, \Gamma_{4+5})(Γ3,Γ4+5)(\Gamma_3, \Gamma_{4+5})

在执行每次操作后,都需要重新确定画作的潜力值:即使用不超过 kk 种颜色对各面进行正确染色的方案数对 109+710^9+7 取模后的余数。

输入格式

第一行包含一个整数 tt (1t10000)(1 \le t \le 10\,000),表示测试数据的组数。接下来是 tt 组测试数据的描述。

每组测试数据的第一行包含三个整数 n,kn, kqq $(3 \le n \le 10^6, 2 \le k \le 10^9, 0 \le q \le 300\,000)$,分别表示树的顶点数、可用颜色数以及执行的操作次数。

第二行包含 n1n-1 个整数 p2,p3,,pnp_2, p_3, \dots, p_n (1pi<i)(1 \le p_i < i),其中 pip_i 是顶点 ii 在树中的父节点。保证树的顶点按照深度优先遍历顺序编号,且在 p2,,pnp_2, \dots, p_n 中,11 至少出现两次。

接下来有 qq 行,第 ii 行包含一个整数 viv_i (2vin)(2 \le v_i \le n),表示第 ii 次操作的参数。

保证所有测试数据中 nn 的总和不超过 10610^6,所有测试数据中 qq 的总和不超过 300000300\,000

输出格式

对于每组测试数据,输出 q+1q+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

输出

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

数据范围与提示

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

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 nn kk qq 附加限制 依赖子任务
11 66 n=3n = 3 k4k \le 4 q10q \le 10 t100,p2=p3=1t \le 100, p_2 = p_3 = 1
22 99 n1000\sum n \le 1\,000 q=0q = 0 pi=2i21p_{i} = 2 \cdot \lfloor \frac{i}{2} \rfloor - 1nn 为奇数
33 1010 q1,000\sum q \le 1,000 pi=1p_i = 1 11
44 44 n9n \le 9 k4k \le 4 q=0q = 0 t100t \le 100
55 33 q10q \le 10 样例, 44
66 22 n1000\sum n \le 1\,000 k=2k = 2 q=0q = 0
77 1111 2,4,62, 4, 6
88 1515 q1000\sum q \le 1\,000 0,170, 1 \sim 7
99 44 n5000\sum n \le 5\,000 q5000\sum q \le 5\,000 0,180, 1 \sim 8
1010 33 n10000\sum n \le 10\,000 q10000\sum q \le 10\,000 0,190, 1 \sim 9
1111 66 n100000\sum n \le 100\,000 q5000\sum q \le 5\,000
1212 77 q100000\sum q \le 100\,000 树的高度不超过 2020 0,1,4,50, 1, 4, 5
1313 1414 0,1120, 1 \sim 12
1414 33 n300000\sum n \le 300\,000 q300000\sum q \le 300\,000 0,1130, 1 \sim 13
1515 33 n1000000\sum n \le 1\,000\,000 0,1140, 1 \sim 14