题解:P13020 [GESP202506 八级] 遍历计数

整棵树的深度优先遍历序列只取决于两个自由度:起点 \(s\) 的选择,以及每个结点遍历其子结点的先后顺序。把树看成以 \(s\) 为根的有根树,根有 \(\deg(s)\) 个子结点可任选顺序,其他结点各有 \(\deg(u)-1\) 个子结点可自由排列;按照乘法原理,固定根 \(s\) 时的序列条数就是 \(\deg(s)!\times\!\!\prod_{u\neq s}(\deg(u)-1)!\)。将所有根的贡献相加可提出公共乘积得到:

\[\sum_{s=1}^n\deg(s)!\!\!\prod_{u\ne s}(\deg(u)-1)!= \Bigl(\prod_{u=1}^n(\deg(u)-1)!\Bigr)\!\sum_{s=1}^n\deg(s)=\Bigl(\prod_{u=1}^n(\deg(u)-1)!\Bigr)\,2(n-1) \]

因为树的度数和恒为 \(2(n-1)\)。于是答案就是 \(\Bigl(\prod_{u=1}^n(\deg(u)-1)!\Bigr)\times2(n-1)\pmod{10^9}\)

实现只需一次遍历统计所有度数,再用阶乘预处理(模 \(10^9\) 取值即可,反正不做逆元),时间复杂度 \(O(n)\)

link

posted @ 2025-06-30 18:10  薛儒浩  阅读(133)  评论(0)    收藏  举报