CF1799H Tree Cutting
题目描述
给定一棵有 $n$ 个顶点的树。
英雄会进行 $k$ 次如下操作:
- 选择一条边。
- 移除这条边。
- 取剩下的两部分中的一部分并删除它。
- 记录剩下部分的顶点数。
给定初始的树和一组记录下来的数字序列。请你计算有多少种不同的操作方式,使得记录下来的数字序列与给定的数字序列相同。由于答案可能很大,请输出答案对 $998\,244\,353$ 取模的结果。若在某一步选择的边或保留的部分不同,则认为两种方式不同。
输入格式
第一行包含一个整数 $n$($2 \leq n \leq 5000$),表示顶点数。
接下来的 $n-1$ 行,每行包含两个整数 $s$、$f$($1 \leq s, f \leq n$,$s \neq f$),表示一条边 $(s, f)$。
下一行包含一个整数 $k$($1 \leq k \leq \min(6, n-1)$),表示操作次数。
下一行包含 $k$ 个整数 $s_1, s_2, \ldots, s_k$($n > s_1 > s_2 > \ldots > s_k \geq 1$),表示记录下来的数字序列。
输出格式
输出一个整数,表示满足条件的操作方式数,对 $998\,244\,353$ 取模。
说明/提示
在第一个测试样例中,有四种可能的操作方式:
- 移除边 $(1, 2)$ 并删除顶点 $1$ 所在部分。移除边 $(2, 3)$ 并删除顶点 $2$ 所在部分。
- 移除边 $(1, 2)$ 并删除顶点 $1$ 所在部分。移除边 $(3, 2)$ 并删除顶点 $3$ 所在部分。
- 移除边 $(3, 2)$ 并删除顶点 $3$ 所在部分。移除边 $(1, 2)$ 并删除顶点 $1$ 所在部分。
- 移除边 $(3, 2)$ 并删除顶点 $3$ 所在部分。移除边 $(2, 1)$ 并删除顶点 $2$ 所在部分。
在第二个测试样例中,有两种可能的操作方式:
- 移除边 $(4, 1)$ 并删除包含顶点 $4$ 的部分。移除边 $(2, 3)$ 并删除包含顶点 $2$ 的部分。
- 移除边 $(4, 1)$ 并删除包含顶点 $4$ 的部分。移除边 $(3, 2)$ 并删除包含顶点 $3$ 的部分。
由 ChatGPT 4.1 翻译