| 证明完了上面的结论,我们直接考虑 DP,设 f_{u,i} 为不考虑 u 子树(除 u 外)内的情况下,p_u=i 的方案数,显然可以得到 f_{1,1}=1,考虑从根到叶子进行 DFS,同时进行 DP。 |
| 考虑从 f_{u,i} 转移到 f_{v,j}(i<j),这时我们需要考虑 \complement_{\text{sub}_u}\text{sub}_v\cup\{u\} 这部分的贡献,注意到这部分变成了一个子树,我们就可以套用上面的结论,同时也要乘上 \displaystyle\binom{n-i-siz_v}{siz_u-siz_v-1} 表示在未填的位置上选出一些位置填上,我们就得到了转移方程式: |
| f_{v,j}=\sum_{i=1}^{j-1}f_{u,i}\binom{n-i-siz_v}{siz_u-siz_v-1}\cdot\frac{(siz_u-siz_v-1)!}{\prod_{v\in\complement{\text{sub}_u}\text{sub}_v\cup\{u\}}siz_v} |
| 但是这个转移方程式实现出来是 \Theta(n^3),注意到这个转移方程式跟 j 半毛钱关系都没有,我们考虑差分。 |
| 具体地,令 j\leftarrow j-1,我们得到: |
| f_{v,j-1}=\sum_{i=1}^{j-2}f_{u,i}\binom{n-i-siz_v}{siz_u-siz_v-1}\cdot\frac{(siz_u-siz_v-1)!}{\prod_{v\in\complement{\text{sub}_u}\text{sub}_v\cup\{u\}}siz_v} |
| 两式相减,得到: |
| f_{v,j}-f_{v,j-1}=f_{u,j-1}\binom{n-j-siz_v+1}{siz_u-siz_v-1}\cdot\frac{(siz_u-siz_v-1)!}{\prod_{v\in\complement{\text{sub}_u}\text{sub}_v\cup\{u\}}siz_v} |
| 自然得到: |
| f_{v,j}=f_{v,j-1}+f_{u,j-1}\binom{n-j-siz_v+1}{siz_u-siz_v-1}\cdot\frac{(siz_u-siz_v-1)!}{\prod_{v\in\complement{\text{sub}_u}\text{sub}_v\cup\{u\}}siz_v} |
| 我们设 cnt_u=\prod_{v\in\text{sub}_u}siz_v,上式就变为: |
| f_{v,j}=f_{v,j-1}+f_{u,j-1}\binom{n-j-siz_v+1}{siz_u-siz_v-1}\cdot\frac{(siz_u-siz_v-1)!}{cnt_u\div siz_u\div cnt_v} |
| 这个东西预处理阶乘和逆元就可以达到可接受的复杂度了,最后的答案 ans_u 就为: |
| ans_u=f_{u,u}\binom{n-u}{siz_u-1}\cdot \frac{siz_u!}{cnt_u} |
| 时间复杂度为 \Theta(n^2)(实现较劣会变为 \Theta(n^2\log p),其中 p 是模数,不知道能不能过),空间复杂度为 \Theta(n^2)。 |