CF2070D Tree Jumps

题目描述

给定一棵包含 $n$ 个顶点的有根树。树中顶点编号为 $1$ 到 $n$,根为顶点 $1$。定义 $d_x$ 为根到顶点 $x$ 的距离(最短路径上的边数)。 初始时,一个棋子被放置在根节点。你可以执行以下操作任意次(包括零次): - 将棋子从当前顶点 $v$ 移动到顶点 $u$,满足 $d_u = d_v + 1$。如果 $v$ 是根节点,可以选择任意满足此约束的顶点 $u$;但如果 $v$ 不是根节点,则 $u$ 不能是 $v$ 的邻居(即 $v$ 和 $u$ 之间不能有直接边相连)。 ![](https://espresso.codeforces.com/769463352aac7806978d82f0bd49238491821303.png) 例如在上图的树结构中,允许的移动包括:$1 \rightarrow 2$,$1 \rightarrow 5$,$2 \rightarrow 7$,$5 \rightarrow 3$,$5 \rightarrow 4$,$3 \rightarrow 6$,$7 \rightarrow 6$。 如果一个顶点序列满足:存在一种棋子移动方式,使得棋子按顺序恰好访问序列中的所有顶点(且仅这些顶点),则该序列被称为有效的。 你的任务是计算有效顶点序列的数量。由于答案可能很大,请输出其对 $998244353$ 取模的结果。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^4$)——测试用例的数量。 每个测试用例的第一行包含一个整数 $n$($2 \le n \le 3 \cdot 10^5$)。 第二行包含 $n-1$ 个整数 $p_2, p_3, \dots, p_n$($1 \le p_i < i$),其中 $p_i$ 表示第 $i$ 个顶点的父节点。顶点 $1$ 是根节点。 输入额外约束:所有测试用例的 $n$ 之和不超过 $3 \cdot 10^5$。

输出格式

对于每个测试用例,输出一个整数——有效顶点序列的数量模 $998244353$ 的结果。

说明/提示

第一个示例中,有效序列为:$[1]$,$[1, 2]$,$[1, 4]$,$[1, 4, 3]$。 第二个示例中,有效序列为:$[1]$,$[1, 2]$。 第三个示例中,有效序列为:$[1]$,$[1, 2]$,$[1, 2, 7]$,$[1, 2, 7, 6]$,$[1, 5]$,$[1, 5, 3]$,$[1, 5, 3, 6]$,$[1, 5, 4]$。 翻译由 DeepSeek R1 完成