首先特判一下 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)
于是问题瓶颈变为求 H−1。
令 A=H−1。
观察 H 易得 H(x)=x2H′(x)+xH(x)+x
代入 A 得 A2(x)A′(x)+(x+1)A(x)=xA2(x)+(x+1)A(x)A′(x)−xA′(x)=0
从而可以得到递推式 ai={0,i=01,i=1−∑i−1j=1(j+1)ajai−j−∑i−1j=2jajai−j+1,i≥2
复杂度 O(nlog2n)。
懒得卡常了。
代码:
1 |
|