AT_arc171_c [ARC171C] Swap on Tree

题目描述

有一棵 $N$ 个顶点的树,顶点编号为 $1$ 到 $N$。第 $i$ 条边连接顶点 $u_i$ 和顶点 $v_i$。 此外,有 $N$ 个编号为 $1$ 到 $N$ 的棋子。初始时,棋子 $i$ 放在顶点 $i$ 上。 你可以进行如下操作,任意次(包括 $0$ 次): - 选择一条边。设该边的两个端点为顶点 $u$ 和 $v$,交换放在顶点 $u$ 和顶点 $v$ 上的棋子。然后,删除这条被选中的边。 设操作全部结束后,顶点 $i$ 上的棋子为 $a_i$。问作为数列 $(a_1, a_2, \dots, a_N)$ 可能出现的方案有多少种?请输出方案数对 $998244353$ 取模的结果。

输入格式

输入以如下格式从标准输入读入。 > $N$ > $u_1$ $v_1$ > $u_2$ $v_2$ > $\vdots$ > $u_{N-1}$ $v_{N-1}$

输出格式

输出作为 $(a_1, a_2, \dots, a_N)$ 可能出现的方案数对 $998244353$ 取模的结果。

说明/提示

## 限制条件 - $2 \leq N \leq 3000$ - $1 \leq u_i < v_i \leq N$ - 输入给出的图为一棵树 ## 样例解释 1 例如,可以通过以下步骤得到 $(a_1, a_2, a_3) = (2, 1, 3)$。 - 选择第 $1$ 条边,交换顶点 $1$ 和顶点 $2$ 上的棋子,并删除该边。此时 $(a_1, a_2, a_3) = (2, 1, 3)$。 - 结束操作。 又如,可以通过以下步骤得到 $(a_1, a_2, a_3) = (3, 1, 2)$。 - 选择第 $2$ 条边,交换顶点 $2$ 和顶点 $3$ 上的棋子,并删除该边。此时 $(a_1, a_2, a_3) = (1, 3, 2)$。 - 选择第 $1$ 条边,交换顶点 $1$ 和顶点 $2$ 上的棋子,并删除该边。此时 $(a_1, a_2, a_3) = (3, 1, 2)$。 - 结束操作。 通过操作可以得到的数列共有以下 $5$ 种: - $(1, 2, 3)$ - $(1, 3, 2)$ - $(2, 1, 3)$ - $(2, 3, 1)$ - $(3, 1, 2)$ 由 ChatGPT 4.1 翻译