题目背景
原题链接:https://oier.team/problems/X3G。

(图片来自 phigros 曲绘,侵删。)
啊~啊~啊咦~啊咦~哦→啊↑啊↓啊~嗯~哎哎↑哎哦哎嗯~哦啊~爱↖爱↑爱↗爱↑爱↑啊~啊~啊咦~啊咦~啊→啊↑啊↓啊~嗯嗯↓嗯↓滴嘚滴嘚唔↑~~嘟←嘟↖️嘟↑嘟↗️嘟→嘟↘️嘟↓
你说得对,但是这里是梦熊周赛题,不是出题人用来发电的地方,所以你需要做一道图论题。
题目描述
约定 lcaG(u,v) 表示编号为 u,v 的结点在有标号有根树 G 上的最近共同祖先。给定一棵根编号为 1,大小为 n ,结点编号为 1∼n 的有根树 T 与一个大小为 m 的点集 S。你需要求出有多少个不同的大小为 n 的结点编号为 1∼n 的有根树 T′,满足对于任意 u,v∈S,有 lcaT(u,v)=lcaT′(u,v)。
答案对 998244353 取模。
我们称两颗大小为 n 的有标号有根树是不同的,当且仅当以下二者至少一个成立:
- 它们的根节点不同。
- 存在一条边,在一棵树中未出现,而在另一棵树中出现。
输入格式
第一行两个正整数 n,m。
第二行 n−1 个正整数 p2,p3,⋯,pn 表示编号为 2∼n 的结点的父亲编号。
最后一行 m 个正整数,表示选出的集合 S 中结点的编号。
输出格式
一行一个整数,表示答案对 998244353 取模的值。
提示
【样例解释 #1】
只有与 T 完全相同的树满足要求。
【样例解释 #2】
对于样例 2,满足要求的树的所有 8 种 p 数组如下(根的 pi 为 0):
{0,1,1,2,1},{0,1,1,2,2},{0,1,1,2,3},{0,1,1,2,4},
{0,1,1,5,2},{0,5,1,2,1},{0,1,5,2,1},{5,1,1,2,0}。
【数据范围】
本题开启捆绑测试。
子任务 |
分数 |
n≤ |
m≤ |
1 |
7 |
10 |
2 |
18 |
200 |
3 |
22 |
105 |
4 |
17 |
106 |
10 |
5 |
36 |
106 |
对于 100% 的数据,2≤m≤n≤106,保证输入的 p 对应了一棵有标号有根树,S 描述了一个结点组成的集合。