析合树真是好东西(
首先特判一下 n≤2 的情况。
设 H(x) 表示排列的 OGF(此处令 0!=0),G(x) 表示根结点为合点且儿子序列为升序的排列个数。
那么有 G(x)=∞∑i=2(H(x)−G(x))i
因此有 G(x)=H2(x)H(x)+1
然后设 F(x) 表示答案,那么易知根结点为析点的排列个数即为 ∞∑i=4fiHi(x)=F(H(x))
那么有 F(H(x))+2G(x)+x=H(x)
设 P(x)=H(x)−2G(x)−x,那么有 F(H(x))=P(x)
代入 H−1(x) 可得 F(x)=P(H−1(x))=x−2x21+x−H−1(x)
根据扩展拉格朗日反演,有 [xn]H−1(x)=1n[xn−1](xH(x))n
直接多项式快速幂即可。
复杂度 O(nlogn)。
代码:
1 |
|