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

先DP

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

记此方案数为 \(f_n\)

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

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

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

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

合点的计算方法:

假设 \(n\ge2\)

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

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

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

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

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

于是对于 \(n\ge 2\) ,有:

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

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

\[-\sum_{i=2}^{n} f_iw_{n,i}-2\sum_{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+2\sum_{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})\) 的半在线卷积(

posted @ 2021-02-04 22:28  夜螢光  阅读(293)  评论(0编辑  收藏  举报