#P9669. [ICPC 2022 Jinan R] DFS Order 2

[ICPC 2022 Jinan R] DFS Order 2

Description

P 有一棵树,根节点是 11 ,总共有 nn 个节点,从 11nn 编号。

他想从根节点开始进行深度优先搜索。他想知道对于每个节点 vv,在深度优先搜索中,它出现在第 jj 个位置的方式有多少种。深度优先搜索的顺序是在搜索过程中访问节点的顺序。节点出现在第 j(1jn)j\,(1 \le j \le n) 个位置表示它在访问了 j1j - 1 个其他节点之后才被访问。因为节点的子节点可以以任意顺序访问,所以有多种可能的深度优先搜索顺序。

P 想知道对于每个节点 vv,有多少种不同的深度优先搜索顺序,使得 vv 出现在第 jj 个位置。对于每个 vvj(iv,jn)j\,(i \le v,j \le n),计算答案。答案可能很大,所以输出时要取模 998244353998\,244\,353

以下是深度优先搜索的伪代码,用于处理树。在调用 main()\textbf{main()} 函数后,dfs_order\texttt{dfs\_order} 将会包含深度优先搜索的顺序。

Input Format

第一行包含一个整数 n(1n500)n\,(1\le n\le 500),表示树中的节点数量。

接下来的n-1行描述了树的边。第i行包含两个整数 uiu_iviv_i,表示连接的两个节点的标签 (1ui,vin,uivi)(1\le u_i,v_i\le n,u_i\not=v_i)

保证给定的边构成一棵树。

Output Format

对于每个从 11nn 的节点 vv,输出一行,包含 nn 个整数,取模 998244353998\,244\,353。在第 vv 行中,第 jj 个整数表示不同的深度优先搜索顺序中,节点 vv 出现在第 jj 个位置的数量。

翻译由 @ayf2192538031 提供。

5
1 2
1 3
3 4
3 5
4 0 0 0 0
0 2 0 0 2
0 2 2 0 0
0 0 1 2 1
0 0 1 2 1