#P13960. [ICPC 2023 Nanjing R] 后缀结构

[ICPC 2023 Nanjing R] 后缀结构

题目描述

给定字符串 u=u1unu = u_1 \dots u_n,令 pre(u,i)\mathrm{pre}(u, i) 表示前缀 u1uiu_1 \dots u_i。特别地,pre(u,0)\mathrm{pre}(u, 0) 是空字符串。

对于两个字符串 u=u1unu = u_1 \dots u_nv=v1vmv = v_1 \dots v_m,令 u+vu+v 表示连接后的字符串 u1unv1vmu_1 \dots u_n v_1 \dots v_m

给定长度为 mm 的字符串 t=t1tmt=t_1 \dots t_m 和一棵有 (n+1)(n + 1) 个节点的树 TT,节点编号为 0,1,,n0, 1, \dots, n,其中节点 00 是根。每条边上都有一个字符。请注意,在本题中,字母表中可能会有多于 2626 个字符。

考虑如下函数 $$f(i,j) = \max{d(x) \mid s_x\text{ 是 }s_i+ \mathrm{pre}(t,j)\text{ 的后缀}}$$ 其中 sis_i 是从根到节点 ii 的最短路径上所有字符连接而成的字符串,d(i)d(i) 是从根到节点 ii 的最短路径经过的边数。

您需要计算 g1,g2,,gmg_1, g_2, \dots, g_m,其中 gj=i=1nf(i,j)g_j=\sum\limits_{i=1}^{n} f(i,j)

请注意,s0s_0 是空字符串,空字符串是任何字符串的后缀。

输入格式

有多组测试数据。第一行输入一个整数 TT 表示测试数据组数,对于每组测试数据:

第一行输入两个整数 nnmm1n,m2×1051 \le n, m \le 2 \times 10^5)。

第二行输入 nn 个整数 p1,p2,,pnp_1, p_2, \dots, p_n0pi<i0 \le p_i < i),其中 pip_i 表示节点 ii 的父节点。

第三行输入 nn 个整数 c1,c2,,cnc_1, c_2, \dots, c_n1cin1 \le c_i \le n),其中 cic_i 表示从节点 pip_i 到节点 ii 的边上的字符是字母表中第 cic_i 个字符。保证对于所有 iji \ne j,有 pipjp_i \ne p_jcicjc_i \ne c_j

第四行输入 mm 个整数 t1,t2,,tmt_1, t_2, \dots, t_m1tin1 \le t_i \le n),其中 tit_i 是字符串 tt 中的第 ii 个字符。

保证所有数据 nn 之和与 mm 之和均不超过 2×1052 \times 10^5

输出格式

每组数据输出一行 mm 个由单个空格分隔的整数 g1,g2,,gmg_1, g_2, \dots, g_m

请不要在行末输出多余空格,否则您的答案可能会被认为是错误的!

2
11 3
0 1 2 0 4 5 4 6 0 9 10
1 3 2 2 1 3 4 1 3 2 1
3 2 4
5 16
0 0 0 1 4
1 2 3 2 2
2 1 3 3 2 1 3 2 1 3 2 2 1 1 2 1
17 26 22
8 5 5 5 5 5 5 5 5 5 5 5 5 5 10 5

提示

我们来计算第一组样例数据中的 f(11,1)f(11, 1)f(11,2)f(11, 2) 以便您更好地理解。有 s11={3,2,1}s_{11} = \{3, 2, 1\},所以 s11+pre(t,1)={3,2,1,3}s_{11} + \text{pre}(t, 1) = \{3, 2, 1, 3\}。因为 s6={2,1,3}s_6 = \{2, 1, 3\} 是该字符串存在于树中的最长后缀,所以 f(11,1)=d(6)=3f(11, 1) = d(6) = 3。另外 s11+pre(t,2)={3,2,1,3,2}s_{11} + \text{pre}(t, 2) = \{3, 2, 1, 3, 2\},那么 s3={1,3,2}s_3 = \{1, 3, 2\} 是该字符串存在于树中的最长后缀,所以 f(11,2)=d(3)=3f(11, 2) = d(3) = 3