题目
题目链接:https://www.luogu.com.cn/problem/P3978
求一棵随机生成的 \(n\) 个结点的有根二叉树期望的叶子节点数。
思路
白嫖一道黑。
完全照搬rqy大爷的题解。
对于一棵\(n\)个节点的二叉树,每一个节点可以往下连两条边,所以总共可以往下连\(2n\)条边;而这棵二叉树已经有\(n-1\)条边了,在\(2n-(n-1)=n+1\)条边中选择一条边连出去都可以形成一棵\(n+1\)个节点的二叉树,且连出去这条边所连接的节点为叶节点,所以一棵有\(n+1\)个节点的二叉树的叶节点个数为\(n\)个节点的二叉树个数\(\times n\)。
而我们知道,大小为\(n\)的二叉树的个数就是卡特兰数的第\(n\)项。所以\(n\)个节点的二叉树的叶子结点数为
\[(n-1)\times \frac{C^{n-1}_{2(n-1)}}{n}
\]
所以一棵\(n\)个节点的叶子期望个数为
\[\frac{(n-1)\times \frac{C^{n-1}_{2(n-1)}}{n}}{C^n_{2n}}=\frac{a(a-1)}{4a-2}
\]
代码
#include <cstdio>
using namespace std;
long long a;
int main()
{
scanf("%lld",&a);
printf("%0.10lf",1.0*a*(a+1)/(4*a-2));
return 0;
}
\[\color{white}{\text{stO rqy Orz}}
\]