「2020-2021 集训队作业」春天,在积雪下结一成形,抽枝发芽

先DP

由析合树的知识,我们发现我们要算的就是根为析点,且儿子数等于 (n) 的树对应的排列的数量 ((n > 2))

记此方案数为 (f_n)

我们容斥计算,首先排列任意,会有 (n!) 的贡献。

然后我们分别减去根为析点且儿子数不足 (n) 与根为合点的情况。

记把 (1 sim n) 划分为 (i) 段,每段值域是连续的且前面段中的数小于后面段中的数的方案数为 (w_{n,i})

析点的计算方法:我们枚举根的儿子数,每个儿子对应的区间显然值域是连续的,我们枚举划分段数 (i(i<n)) ,则一共有 (f_iw_{n,i}) 种排列方式。

合点的计算方法:

假设 (nge2)

我们记恰好分成 (i(ige 2)) 段的方案数为 (g_i) ,我们考虑 (w_{n,i})(g_i) 的关系。

显然有 (w_{n,i}=sum_{j=i}^n g_jinom{j-1}{i-1}) 。二项式反演一下就可以得到 (g_i) 的表达式。

因为我们要容斥掉的方案数是 (g_i) 的和,我们考虑每个 (w_{n,i}) 的贡献。

我们发现 (w_{n,i}) 的总贡献显然是 ((-1)^i)

因为合点的儿子可以单调上升或下降,所以减去的方案数要乘 (2)

于是对于 (nge 2) ,有:

[f_n=n!-sum_{i=2}^{n-1} f_iw_{n,i}-2sum_{i=2}^{n} (-1)^iw_{n,i} ]

我们可以做一些小小的变换:

[-sum_{i=2}^{n} f_iw_{n,i}-2sum_{i=1}^{n} (-1)^iw_{n,i}=n! ]

考虑怎么算 (w_{n,i}) ,设 (G(x)=sum_{i=1}i!x^i) ,则 (w_{n,i}=[x^n]G(x)^i)

也就是

[-[x^n](sum_{i=2}^{n} f_iG(x)^i+2sum_{i=1}^{n} (-1)^iG(x)^i)=n! ]

[sum_{i=2} f_iG(x)^i-frac{2G(x)}{1+G(x)}=-G(x)-x ]

[sum_{i=2} f_iG(x)^i=frac{-G(x)^2+G(x)}{1+G(x)}-x ]

(F(x)=sum_{i=0} f_ix^i) (记 (f_0=f_1=0)),

(F(G(x))=frac{-G(x)^2+G(x)}{1+G(x)}-x)

(G(x)) 的复合逆为 (P(x)) ,则有 (F(x)=frac{-x^2+x}{1+x}-P(x))

直接拉格朗日反演可以获得 (60) 分的好成绩(

考虑加速,我们发现 (x^2G'(x)+x+xG(x)=G(x))

于是有 (frac{P(x)^2}{P'(x)}+(x+1)P(x)=x)

展开得到 (sum_{i=0}^np_ip_{n-i}+sum_{i=0}^{n-1}(i+1)p_{i+1}(p_{n-i}+p_{n-i-1})=np_n)

[p_n=-sum_{i=1}^{n-1}p_ip_{n-i}-sum_{i=1}^{n-2}(i+1)p_{i+1}(p_{n-i}+p_{n-i-1})-p_{n-1} ]

其中 (p_0=0,p_1=1)

然后就可以分治FFT了,还可以使用 (O(frac{nlog^2n}{loglogn})) 的半在线卷积(

原文地址:https://www.cnblogs.com/invisible-eyes/p/14375306.html