LP3978 [TJOI2015] 概率论 [递推/结论]

Author Avatar
空気浮遊 2019年02月17日
  • 在其它设备中阅读本文章

Solution

考虑一个 $n$ 个点的二叉树如果有 $k$ 个叶子节点就有 $k$ 种拆法拆成一棵 $n-1$ 的树,而我们要求所有的树的 $k$ 之和。
发现其实 $k$ 之和就等价于任意一棵 $n-1$ 的树都有 $n$ 种添法添成 $n$ 的树。

即 $n$ 拆成 $n-1$ 的方案数之和等于 $n-1$ 添成 $n$ 的方案数之和。这种证法非常感性,但足够简单。更深一步的考虑,每种添法都有唯一对应的拆法,因此这个结论是正确的。

所以 $n$ 个点的二叉树的叶子节点数目之和等于 $n-1$ 个点的二叉树的方案数乘以 $n$。

然后发现 $n$ 个点的方案数就是卡特兰数,然后化下公式结论就有了。

Code

// Code by ajcxsu
// Problem: Etree

#include<bits/stdc++.h>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    printf("%.9lf", (double)n*(n+1)/2/(2*n-1));
    return 0;
}