Burnside 引理 + 牛顿迭代.
就是求每个节点的儿子个数 $\le 3$ 的有根树数目.
记答案的生成函数为 $F(x)$ ,直接 $F(x)=1+F(x)^3$ 显然是错的,因为可能出现同构的情况.
考虑 Burnside 引理,对 $3$ 个儿子的置换有 $6$ 种.
对于 $(1,2,3)$ 这 $1$ 种置换,每种方案都是不动点.
对于 $(1,3,2),(3,2,1),(2,1,3)$ 这 $3$ 种置换,只有在置换中成环的两棵子树相同的方案才是不动点.
对于 $(2,3,1),(3,1,2)$ 这 $2$ 种置换,只有三棵子树都相同的方案才是不动点.
根据 Burnside 引理,本质不同的方案数是各个置换的不动点数目平均数,得到
$$
F(x)=1+x\frac{F(x)^3+3F(x^2)F(x)+2F(x^3)}{6}
$$
考虑牛顿迭代解出这个方程,设 $G(F(x))=x\frac{F(x)^3+3F(x^2)F(x)+2F(x^3)}{6}-F(x)+1$ .
若当前已知了 $F(x)\bmod x^n$ ,要求出 $F(x)\bmod x^{2n}$ ,可以发现 $F(x^2)\bmod x^{2n},F(x^3)\bmod x^{2n}$ 也已知了.
于是可以直接把它们看做常量,记 $A(x)=F(x^2)\bmod x^{2n},B(x)=F(x^3)\bmod x^{2n}$ .
注意是对 $F(x)$ 求导,所以 $x$ 也可以看做常量.
得到 $G’(F(x))=x\frac{3F(x)^2+3A(x)}{6}-1$ ,代入牛顿迭代公式 $F(x)=F_0(x)-\frac{G(F_0(x))}{G’(F_0(x))}$ ,
$$
F(x)=F_0(x)-\frac{x(F_0(x)^3+3A(x)F_0(x)+2B(x))-6F_0(x)+6}{x(3F_0(x)^2+3A(x))-6}
$$
时间复杂度 $O(n\log n)$ .
1 | //%std |