传送门
生成函数好题。
题意简述:求
n
n
n个点的树的叶子数期望值。
思路:
考虑
f
n
f_n
fn表示
n
n
n个节点的树的数量。
所以有递推式
f
0
=
1
,
f
n
=
∑
i
=
0
n
−
1
f
i
f
n
−
1
−
i
(
n
>
0
)
f_0=1,f_n=\sum_{i=0}^{n-1}f_if_{n-1-i}(n>0)
f0=1,fn=∑i=0n−1fifn−1−i(n>0)
正是一个卷积的形式。
那么
f
n
f_n
fn的生成函数
F
(
x
)
=
x
F
2
(
x
)
+
1
F(x)=xF^2(x)+1
F(x)=xF2(x)+1 注意要填上
f
0
f_0
f0
同理,考虑
g
n
g_n
gn表示
n
n
n个节点的树的叶子数总数。
有递推式
g
0
=
0
,
g
1
=
1
,
g
n
=
2
∑
i
=
0
n
−
1
f
i
g
n
−
i
−
1
(
n
>
1
)
g_0=0,g_1=1,g_n=2\sum_{i=0}^{n-1}f_ig_{n-i-1}(n>1)
g0=0,g1=1,gn=2∑i=0n−1fign−i−1(n>1)
所以
g
n
g_n
gn的生成函数
G
(
x
)
=
2
x
F
(
x
)
G
(
x
)
+
x
G(x)=2xF(x)G(x)+x
G(x)=2xF(x)G(x)+x 注意要填上
g
1
g_1
g1
然后
F
(
x
)
=
x
F
2
(
x
)
+
1
F(x)=xF^2(x)+1
F(x)=xF2(x)+1
<=>
x
F
2
(
x
)
−
F
(
x
)
+
1
=
0
xF^2(x)-F(x)+1=0
xF2(x)−F(x)+1=0
<=>
F
(
x
)
=
1
−
1
−
4
x
2
x
F(x)=\frac{1-\sqrt{1-4x}}{2x}
F(x)=2x1−1−4x 不取
1
+
1
−
4
x
2
x
\frac{1+\sqrt{1-4x}}{2x}
2x1+1−4x是因为它不能向0收敛
G
(
x
)
=
x
1
−
2
x
F
(
x
)
=
x
1
−
4
x
G(x)=\frac x{1-2xF(x)}=\frac x{\sqrt{1-4x}}
G(x)=1−2xF(x)x=1−4xx
然后我们对
x
F
(
x
)
xF(x)
xF(x)求导:
(
x
F
(
x
)
)
′
=
1
1
−
4
x
=
G
(
x
)
x
(xF(x))'=\frac1{\sqrt{1-4x}}=\frac{G(x)}x
(xF(x))′=1−4x1=xG(x)
而对于
x
F
(
x
)
xF(x)
xF(x)第
n
n
n项
f
n
x
n
+
1
f_nx^{n+1}
fnxn+1求导之后会变成
f
n
(
n
+
1
)
x
n
f_n(n+1)x^n
fn(n+1)xn等式右边:
g
n
+
1
x
n
+
1
x
=
g
n
+
1
x
n
\frac{g_{n+1}x^{n+1}}x=g_{n+1}x^n
xgn+1xn+1=gn+1xn,那么
g
n
+
1
=
f
n
(
n
+
1
)
g_{n+1}=f_n(n+1)
gn+1=fn(n+1)
我们令答案的函数是
A
(
x
)
=
∑
i
=
0
∞
p
n
x
n
A(x)=\sum_{i=0}^{\infty}p_nx^n
A(x)=∑i=0∞pnxn
那么
g
n
=
f
n
−
1
n
=
p
n
f
n
=
>
p
n
=
f
n
−
1
n
f
n
g_n=f_{n-1}n=p_nf_n=>p_n=\frac{f_{n-1}}{nf_n}
gn=fn−1n=pnfn=>pn=nfnfn−1
仔细观察会发现
f
n
f_n
fn是卡特兰数,然后带入就做完了。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
double n;
return scanf("%lf",&n),printf("%.9lf",n*(n+1)/(4*n-2)),0;
}