P3978 [TJOI2015]概率论
参考 rqy 的题解(第一篇):
设 fn 表示 n 个节点的树的形态数, gn 表示 n 个节点的所有树的叶子总数。
首先看 f :
显然 f0=1 。
现在有 n 个节点。当根节点的左子树有 i 个节点的时候,右子树有 n−i−1 个节点。
那么有
fn=i=0∑n−1fi×fn−i−1
这是卡特兰数的递推式,故 f 的通项公式为
fn=n+1C2nn
接下来看 g :
-
对于一棵总共有 n 个节点、有 k 个叶子节点的二叉树,可以任意去掉一个叶子结点得到一棵有 n−1 个节点的二叉树。
-
而对于一棵有 n−1 个节点的二叉树,每个节点最多可以有 2 个儿子,总共有 2(n−1) 个空位,自己本生用掉 n−2 个空位,故有 n 个可以插叶子结点的地方,也就对应着 n 棵 n 个节点的二叉树。
-
这样子就相当于构成了一张二分图。左边是 n−1 个节点的二叉树,右边是 n 个节点的二叉树。而根据 1 ,每条边就对应着一个叶子结点。又根据 2 ,边的总数为 fn−1×n 。
故我们得出
gn=n⋅fn−1
答案为
ans=fngn=fnn⋅fn−1=n+1C2nnn⋅nC2n−2n−1=(2n)!⋅(n−1)!⋅(n−1)!⋅nn⋅(2n−2)!⋅n!⋅n!⋅(n+1)=2(2n−1)n⋅(n+1)