#5076. Hash on Tree

0

Hash on Tree

Hash on Tree

题目描述

你被给定一棵以 NN 个顶点编号为 11 到 NN 的有根树。
顶点 11 是根,对于顶点 ii (2≤i≤N)(2 \leq i \leq N),它的父亲是顶点 pip_i (p_i < i)。
另外,有一个序列 A=(A1,A2,…,AN)A = (A_1, A_2, \dots, A_N)。 该有根树的 哈希值 按如下方式计算:

按顺序 n=N,N−1,…,2,1n = N, N-1, \dots, 2, 1 定义 f(n)f(n) (1≤n≤N)(1 \leq n \leq N)。 如果顶点 nn 是叶子,f(n)=Anf(n) = A_n。 如果顶点 nn 不是叶子,f(n)=An+∏c∈C(n)f(c)\displaystyle f(n) = A_n + \prod_{c \in C(n)} f(c),其中 C(n)C(n) 是 nn 的孩子集合。

有根树的哈希值为 f(1) mod 998244353f(1) \bmod{998244353}。

按给定顺序处理 QQ 个查询。
每个查询给出 vv 和 xx,将 AvA_v 更新为 xx,然后计算有根树的哈希值。

输入格式

输入按照标准输入以以下格式给出,其中 queryi\mathrm{query}_i 表示第 ii 个查询: NN QQ p2p_2 p3p_3 …\dots pNp_N A1A_1 A2A_2 …\dots ANA_N query1\mathrm{query}_1 query2\mathrm{query}_2 ⋮\vdots queryQ\mathrm{query}_Q

每个查询按以下格式给出: vv xx

输出格式

打印 QQ 行。第 ii 行应包含第 ii 个查询的答案。

3 2
1 1
3 5 1
3 4
2 1
23
7
5 4
1 1 2 2
2 5 4 4 1
3 3
5 0
4 5
5 2
29
17
17
47
10 10
1 2 1 2 5 6 3 5 1
766294629 440423913 59187619 725560240 585990756 965580535 623321125 550925213 122410708 549392044
1 21524934
9 529970099
6 757265587
8 219853537
5 687675301
5 844033519
8 780395611
2 285523485
6 13801766
3 487663184
876873846
952166813
626349486
341294449
466546009
331098453
469507939
414882732
86695436
199797684

提示

2≤N≤2×1052 \leq N \leq 2 \times 10^5 1≤Q≤2×1051 \leq Q \leq 2 \times 10^5 1 \leq p_i < i 0 \leq A_i < 998244353 1≤v≤N1 \leq v \leq N 0 \leq x < 998244353 所有输入值均为整数。初始时,A=(3,5,1)A = (3, 5, 1)。
第一个查询按如下方式处理:

把 A3A_3 更新为 44。现在 A=(3,5,4)A = (3, 5, 4)。 有根树的哈希值按如下计算为 2323,应当打印该值。 顶点 33 没有孩子。因此,f(3)=4f(3) = 4。 顶点 22 没有孩子。因此,f(2)=5f(2) = 5。 顶点 11 的孩子是 22 和 33。因此,f(1)=3+5×4=23f(1) = 3 + 5 \times 4 = 23。 f(1) mod 998244353=23f(1) \bmod{998244353} = 23 是该有根树的哈希值。

第二个查询按如下方式处理:

把 A2A_2 更新为 11。现在 A=(3,1,4)A = (3, 1, 4)。 有根树的哈希值按如下计算为 77: 顶点 33 没有孩子。因此,f(3)=4f(3) = 4。 顶点 22 没有孩子。因此,f(2)=1f(2) = 1。 顶点 11 的孩子是 22 和 33。因此,f(1)=3+1×4=7f(1) = 3 + 1 \times 4 = 7。 f(1) mod 998244353=7f(1) \bmod{998244353} = 7 是该有根树的哈希值。

标签: AtCoder|abc351G

来源

AtCoder|abc351G