题面:
题解:
假瑞的做法orz
考虑用组合意义来做,观察递推式 f i = 1 i ∑ j = 0 i − 1 f j f i − j − 1 f_i=\frac{1}{i}\sum_{j=0}^{i-1}f_jf_{i-j-1} fi=i1∑j=0i−1fjfi−j−1,它除了和卡特兰数递推式很像之外,还和二叉树计数的递推式很像。
同时注意到 f 0 = 0 f_0=0 f0=0,所以递推式可以变为 f i = 1 i ∑ j = 1 i − 2 f j f i − j − 1 f_i=\frac{1}{i}\sum_{j=1}^{i-2}f_jf_{i-j-1} fi=i1∑j=1i−2fjfi−j−1,即我们二叉树中每个非叶子节点都有恰好两个儿子,那么也可知 n n n 一定为奇数。下面 “完全二叉树” 的意义为每个非叶子节点都有恰好两个儿子的二叉树。
那么 f n f_n fn 就可以理解为枚举每一种完全二叉树,然后把 ∏ u 1 s z u \prod_{u}\frac{1}{sz_u} ∏uszu1 的贡献统计进答案。
注意这里枚举的二叉树是无标号但是有左右儿子之分的,那么我们不妨将这棵二叉树上的点按 dfn 序标号。
发现 ∏ u 1 s z u \prod_u\frac{1}{sz_u} ∏uszu1 就是这棵二叉树的拓扑序数量除以 n ! n! n!,那么现在的问题转变为:枚举每一种二叉树,然后把其拓扑序个数统计进答案。
考虑每个点 i i i(注意这里是按 dfn 序标号,上面已经说过了)在拓扑序中的位置 p o s i pos_i posi,发现对于每一种 1 ∼ n 1\sim n 1∼n 的排列,如果把它当做 p o s pos pos 序列的话,其唯一对应着一棵普通二叉树,即为这个排列的笛卡尔树。
但是还没完,这个 p o s pos pos 序列对应的不一定是一棵完全二叉树,我们只要那些完全二叉树的方案。
发现一棵树是完全二叉树当且仅当 dfn 序为奇数的点都是叶子,那么一个序列
p
o
s
pos
pos 是来自完全二叉树的当且仅当:
∀
i
m
o
d
2
=
1
,
p
o
s
i
>
p
o
s
i
−
1
∧
p
o
s
i
>
p
o
s
i
+
1
\forall i\bmod 2=1, pos_i>pos_{i-1}\land pos_i>pos_{i+1}
∀imod2=1,posi>posi−1∧posi>posi+1
完整写下来:
p
o
s
1
>
p
o
s
2
<
p
o
s
3
>
p
o
s
4
<
⋯
>
p
o
s
n
−
1
<
p
o
s
n
pos_1>pos_2<pos_3>pos_4<\cdots >pos_{n-1}<pos_n
pos1>pos2<pos3>pos4<⋯>posn−1<posn。我们只需要求出满足该条件的排列个数即可。
考虑让所有大于号都满足,然后容斥哪些小于号不满足,那么就得到了若干段连续的大于号,即:
n
!
∑
s
1
+
⋯
+
s
m
=
n
(
∏
i
=
1
m
−
1
(
−
1
)
s
i
/
2
−
1
s
i
!
)
(
(
−
1
)
(
s
m
−
1
)
/
2
s
m
!
)
n!\sum_{s_1+\cdots+s_m=n}\left(\prod_{i=1}^{m-1}\frac{(-1)^{s_i/2-1}}{s_i!}\right)\left(\frac{(-1)^{(s_m-1)/2}}{s_m!}\right)
n!s1+⋯+sm=n∑(i=1∏m−1si!(−1)si/2−1)(sm!(−1)(sm−1)/2)
其中要求
s
1
,
⋯
,
s
m
−
1
s_1,\cdots,s_{m-1}
s1,⋯,sm−1 为正偶数,
s
m
s_m
sm 为正奇数。
设
F
(
x
)
=
∑
i
≥
1
,
2
∣
i
(
−
1
)
i
/
2
−
1
i
!
x
i
F(x)=\sum_{i\geq 1,2|i}\frac{(-1)^{i/2-1}}{i!}x^i
F(x)=∑i≥1,2∣ii!(−1)i/2−1xi,
G
(
x
)
=
∑
i
≥
1
,
2
∤
i
(
−
1
)
(
i
−
1
)
/
2
i
!
x
i
G(x)=\sum_{i\geq 1,2\not|i}\frac{(-1)^{(i-1)/2}}{i!}x^i
G(x)=∑i≥1,2∣ii!(−1)(i−1)/2xi,那么我们要求的就是:
[
x
n
]
G
(
x
)
1
−
F
(
x
)
[x^n]\frac{G(x)}{1-F(x)}
[xn]1−F(x)G(x)
时间复杂度
O
(
n
log
n
)
O(n\log n)
O(nlogn)。
神奇的是,你发现
∑
i
≥
0
(
−
1
)
i
/
2
i
!
x
i
=
cos
(
x
)
\sum_{i\geq 0}\frac{(-1)^{i/2}}{i!}x^i=\cos(x)
∑i≥0i!(−1)i/2xi=cos(x),
G
(
x
)
=
sin
(
x
)
G(x)=\sin (x)
G(x)=sin(x),于是我们要求的其实是:
[
x
n
]
cos
(
x
)
sin
(
x
)
=
[
x
n
]
tan
(
x
)
[x^n]\frac{\cos(x)}{\sin(x)}=[x^n]\tan(x)
[xn]sin(x)cos(x)=[xn]tan(x)