AT_abc351_g [ABC351G] Hash on Tree

题目描述

有一棵有 $N$ 个顶点的有根树,顶点编号为 $1$ 到 $N$。 顶点 $1$ 是根,顶点 $i$($2 \leq i \leq N$)的父节点是顶点 $p_i$,且 $p_i < i$。 另外,给定一个数列 $A = (A_1, A_2, \dots, A_N)$。 有根树的**哈希值**定义如下: - 对于 $f(n)$($1 \leq n \leq N$),按照 $n = N, N-1, \dots, 2, 1$ 的顺序进行如下计算: - 如果顶点 $n$ 是叶子节点,则 $f(n) = A_n$。 - 如果顶点 $n$ 不是叶子节点,设 $C(n)$ 为 $n$ 的所有子节点的集合,则 $f(n) = A_n + \prod_{c \in C(n)} f(c)$。 - 有根树的哈希值为 $f(1) \bmod{998244353}$。 给定 $Q$ 个查询,请按顺序处理每个查询。 每个查询给定 $v, x$,将 $A_v$ 的值更新为 $x$,然后输出当前有根树的哈希值。

输入格式

输入按以下格式从标准输入给出,其中 $\mathrm{query}_i$ 表示第 $i$ 个查询。 > $N$ $Q$ > $p_2$ $p_3$ $\dots$ $p_N$ > $A_1$ $A_2$ $\dots$ $A_N$ > $\mathrm{query}_1$ > $\mathrm{query}_2$ > $\vdots$ > $\mathrm{query}_Q$ 每个查询的格式如下: > $v$ $x$

输出格式

输出 $Q$ 行,第 $i$ 行输出第 $i$ 个查询的答案。

说明/提示

### 限制条件 - $2 \leq N \leq 2 \times 10^5$ - $1 \leq Q \leq 2 \times 10^5$ - $1 \leq p_i < i$ - $0 \leq A_i < 998244353$ - $1 \leq v \leq N$ - $0 \leq x < 998244353$ - 输入的所有值均为整数 ### 样例解释 1 初始时,$A = (3, 5, 1)$。第 1 个查询按如下方式处理: - 将 $A_3$ 更新为 $4$,此时 $A = (3, 5, 4)$。 - 有根树的哈希值按如下步骤计算为 $23$,输出 $23$。 - 顶点 $3$ 没有子节点,所以 $f(3) = 4$。 - 顶点 $2$ 没有子节点,所以 $f(2) = 5$。 - 顶点 $1$ 有子节点 $2, 3$,所以 $f(1) = 3 + 5 \times 4 = 23$。 - $f(1) \bmod{998244353} = 23$,作为有根树的哈希值。 第 2 个查询按如下方式处理: - 将 $A_2$ 更新为 $1$,此时 $A = (3, 1, 4)$。 - 有根树的哈希值按如下步骤计算为 $7$,输出 $7$。 - 顶点 $3$ 没有子节点,所以 $f(3) = 4$。 - 顶点 $2$ 没有子节点,所以 $f(2) = 1$。 - 顶点 $1$ 有子节点 $2, 3$,所以 $f(1) = 3 + 1 \times 4 = 7$。 - $f(1) \bmod{998244353} = 7$,作为有根树的哈希值。 由 ChatGPT 4.1 翻译