AT_pakencamp_2022_day2_f Farthest

题目描述

パ研君正在解如下问题。 > 给定一棵有 $N$ 个顶点的树,顶点编号为 $1, 2, \ldots, N$。 > > 对于每个顶点,求出从该顶点出发最远的顶点中的一个。如果有多个答案,任选其一均可。 パ研君解出了这个问题,并且对于 $1 \leq i \leq N$,从顶点 $i$ 出发最远的顶点之一为 $A_i$。 可是,令人遗憾的是,刚解决完这个问题后,他已经不记得原本的树的结构以及序列 $A$ 的部分内容了。你的任务是帮助パ研君还原出序列 $A$。 现在你得到了一个长度为 $N$ 的数列 $B$。该数列保留了部分 $A$ 的信息。请你考虑所有长度为 $N$ 的数列 $A$,使其满足以下所有条件: - 如果 $B_i \neq -1$,则 $A_i = B_i$。 - 存在一棵树,对于 $1 \leq i \leq N$,从顶点 $i$ 出发最远的顶点之一是 $A_i$。 请你告诉パ研君,满足条件的 $A$ 有多少种可能。如果不存在满足条件的 $A$,请输出 $0$。 由于答案可能很大,请将答案对 $998244353$ 取模后输出。

输入格式

输入为一行,包含: > $N$ $B_1$ $B_2$ $\ldots$ $B_N$

输出格式

输出满足条件的 $A$ 的个数对 $998244353$ 取模的结果,输出 $1$ 行。

说明/提示

### 子任务 1. ($100$ 分)$B_i \neq -1$ $\quad (1 \leq i \leq N)$ 2. ($100$ 分)$1 \leq N \leq 20$ 3. ($100$ 分)$1 \leq N \leq 2000$ 4. ($300$ 分)没有额外限制 ### 样例解释 1 存在 $3$ 种 $A$ 分别为 $(2, 1, 1),\ (2, 1, 2),\ (2, 3, 2)$。 该输入输出样例满足子任务 $2, 3, 4$ 的限制。 ### 样例解释 2 该输入符合子任务 $2, 3, 4$ 的限制。 ### 样例解释 3 看来パ研君解题时出错了,不过这个输入仍然满足所有子任务的限制。 ### 数据范围 - 所有输入均为整数 - $1 \leq N \leq 2 \times 10^5$ - $1 \leq B_i \leq N$ 或 $B_i = -1$,其中 $1 \leq i \leq N$ 由 ChatGPT 5 翻译