先膜一发 shadowice1984的题解,太神了!
题意简述
你有一个 $n$,表示你的二叉树将要有 $n$ 个节点。然后每次你的树会等概率选择某个点的还没长过的儿子,在这里长一个儿子。容易证明,这样有 $n!$ 种方案。
(第一次有一种方案,第二次两种,第三次三种…一共就是 $n!$ 种)
然后你要输出树上路径和的期望值乘以 $n!$ 后 $\bmod{p}$ 的值。
$n,p$ 给定,满足:$n\le 2000,p\le 10^9+7$
思路
考虑每条边的贡献:如果树是确定的,那么从 $i$ 连向 $i$ 父亲的边,的贡献是 $size_i(n-size_i)$。其中 $size_u$ 表示 $u$ 的子树大小。枚举 $i$,把这个式子加起来就是答案了。
然后我们现在树是不确定的…注意到 $n\le 2000$,所以我们考虑再加一维枚举 $size$。关键就是,如何计算点 $i$ 的子树里有 $size$ 个点的树的方案数?
考虑点 $i$ 子树内,有 $size!$ 种生成的形态。然后我们选择哪些点呢?这个方案数有 $C_{n-1}^{size-i}$ 种。
这一部分答案为 $size!\times C_{n-i}^{size-1}$。
考虑点 $i$ 子树外。在树生成到 $i$ 之前,有 $i!$ 种方案。然后我们后面的 $n-i-size+1$ 个点,还要保证不能放到 $i$ 子树内。然后第一次有 $i-1$ 种方案,第二次 $i$ 种,第 $k$ 次有 $i-k+2$ 种方案。一共就是 $(i-1)i(i+1)(i+2)…(n-size-1)$ 种方案。
这一部分答案为 $i!\times (i-1)i(i+1)(i+2)…(n-size-1)=(n-size-1)!\times i (i+1)$
于是,枚举 $i,size$ 后,总共的答案就是
$size(n-size) \times size!C_{n-i}^{size-1}\times i(i-1)(n-size-1)!$
$i$ 从 $2$ 到 $n$,$size$ 从 $1$ 到 $n-i+1$,求和即可
代码
1 |
|