TonyYin's Blog

Back

题意#

nn 个点,随机构成一颗有根树,求叶子的期望数量。

n109n\leq 10^9.

Subtask\rm{Subtask} 11#

对于 20%20\% 的数据,n20n\leq 20.

暴力是过不了的,应该有一些 DP 可以通过。

Subtask\rm{Subtask} 22#

fif_i 表示包含 ii 个节点的有根树数量,那么根据卡特兰数公式,有 fn=1n+1C2nnf_n=\frac{1}{n+1}C_{2n}^{n}.

因此当 n=20n=20 时,不同的有根树数量为 f20=6564120420f_{20}=6564120420,暴力无法通过 Subtask\rm{Subtask} 11.

gig_i 表示有 ii 个节点的所有不同形态二叉树的叶子结点数量和,那么题目所求即为:gnfn\frac{g_n}{f_n}.

先打表,至少可以打到 n=10n=10.

观察一下,可以发现一个规律:

gn=fn1ng_n=f_{n-1}\cdot n

fn=1n+1C2nnf_n=\frac{1}{n+1}C_{2n}^{n},题目所求的答案可以用只含有 nn 的式子表示出来:

Ans=gnfn=fn1nfn=1n(2n2n1)n1n+1(2nn)=(n+1)(2n2)!(n1)!(n1)!nn(2n)!(n)!(n)!\operatorname{Ans} =\frac{g_n}{f_n} =\frac{f_{n-1}\cdot n}{f_n} =\frac{\frac{1}{n}\binom{2n-2}{n-1}\cdot n}{\frac{1}{n+1}\binom{2n}{n}} =\frac{(n+1)\cdot \frac{(2n-2)!}{(n-1)!(n-1)!}\cdot n}{n\cdot \frac{(2n)!}{(n)!(n)!}}

继续化简得到:

Ans=(n+1)(2n2)!(2n)!(n1)!(n1)!(n)!(n)!=(n+1)1(2n1)(2n)1n2=n(n+1)2(2n1)\operatorname{Ans}=\frac{(n+1)\cdot \frac{(2n-2)!}{(2n)!}}{\frac{(n-1)!(n-1)!}{(n)!(n)!}}=\frac{(n+1)\cdot \frac{1}{(2n-1)\cdot (2n)}}{\frac{1}{n^2}}=\frac{n\cdot (n+1)}{2\cdot (2n-1)}

用快速幂求逆元即可,时间复杂度为 O(logp)\mathcal{O}(\log p)pp 为模数.

证明#

下面给出 gn=fn1ng_n=f_{n-1}\cdot n 的证明。

#

对于每棵 nn 个点的二叉树,如果里面有 kk 个叶节点,那么我们分别把这 kk 个叶子删去,会得到 kkn1n-1 个点的二叉树。

因此,所有 nn 个节点的二叉树中,每个叶子都唯一对应一棵 n1n-1 个节点的二叉树

#

对于每棵 n1n-1 个点的二叉树,有 nn 个位置可以接上一个新的叶子节点。

因此,每棵 n1n-1 个节点的二叉树都对应 nn 个叶子。(所有 nn 个节点的二叉树的所有叶子中的 nn 个)

综上,结论得证。

【ZROI-21CSP7连测-Day1-T4】解谜
https://www.tonyyin.top/blog/oi-solution/zroi-21csp-day1-t4
Author TonyYin
Published at September 13, 2021
Comment seems to stuck. Try to refresh?✨