-
题目链接
-
题目大意
求有多少叶子数为 (n) 的树满足所有非叶节点的儿子数 (xin S) 。
(T) 组询问,(S) 预先给定,答案对 (M) 取模。
(1le nle 10^{18},2le max{s|sin S},Mle 50,1le Tle 100,1 otin S)
-
前言
(Huge{ ext{stO EI Orz}})
-
题解
显然考虑生成函数,设答案的生成函数为 (F(x)) ,那么:
[F(x)=x+sum_{iin S}F(x)^i\ F(x)-sum_{iin S}F(x)^i=x ]显然想到拉格朗日反演,构造函数 (G(x)=x-sum_{iin S}x^i) ,那么有:
[[x^n]F(x)=frac{1}{n}[x^{n-1}]left(frac{x}{G(x)} ight)^n ]这并不能做,因为不保证 (n) 在模 (M) 意义下有逆。
然后考虑 ( ext{EI}) 在今年 ( ext{WC2021}) 提出的另类拉格朗日反演,有:
[[x^n]F(x)=[x^{n-1}]G'(x)left(frac{x}{G(x)} ight)^{n+1} ]这样我们就成功规避了除法,现在问题转化为求一个多项式的高阶幂的问题。
接下来我们仅考虑模数是质数或质数次幂的情况,因为更一般的情况可以直接 (CRT) 求得。
设该质数为 (p) 。
先考虑模 (p) 。
根据历年的一些经典题目,我们可以得到多项式高阶幂模质数的一个重要性质:
[F(x)^pequiv F(x^p)pmod p ]证明即考虑多项式系数 (inom{p}{a_1,dots,a_m}) ,其模 (p) 不为 (0) 当且仅当 (a_1=p) ,此时值为 (1) ,证毕。
那么我们可以考虑设计一个算法,每次将规模 (/p) ,就可以解决这个问题。
具体而言,考虑计算 ([x^m]A(x)B(x)^n),令 (m=pm_1+r_m,n=pn_1+r_n),然后我们进行一些推导:
[egin{aligned} &[x^m]A(x)B(x)^n\ equiv&[x^{pm_1+r_m}]A(x)B(x)^{pn_1+r_n}\ equiv&[x^{pm_1+r_m}](A(x)B(x)^{r_n})B(x)^{pn_1}pmod p end{aligned} ]令 (A(x)B(x)^{r_n}=sum_{r=0}^{p-1}x^rC_r(x^p)) ,那么:
[egin{aligned} &[x^{pm_1+r_m}](A(x)B(x)^{r_n})B(x)^{pn_1}\ equiv&[x^{pm_1+r_m}]x^{r_m}C_{r_m}(x^p)B(x)^{pn_1}\ equiv&[x^{pm_1}]C_{r_m}(x^p)B(x^p)^{n_1}\ equiv&[x^{m_1}]C_{r_m}(x)B(x)^{n_1}pmod p end{aligned} ]这样我们就可以递归了,预处理出所有 (B^r) ,令 (A,B) 的项数为 (k),那么复杂度是 (mathcal O((kp)^2+Tk^2log_p n)) 。
接下来考虑模 (p^u) 。
根据上方的讨论,我们自然希望多项式高阶幂模 (p^u) 也有类似性质。
事实上对 (p^u (uin ^+)) ,我们都有:
[F(x)^{p^u}equiv F(x^p)^{p^{u-1}}pmod {p^u} ]考虑归纳证明,(u=1) 由上可知成立,对于 (u> 1) ,设 (F(x)^{p^u}=F(x^p)^{p^{u-1}}+p^uG(x)) ,那么:
[egin{aligned} F(x)^{p^{u+1}}=&(F(x^p)^{p^{u-1}}+p^uG(x))^p\ =&sum_{i=0}^pinom{p}{i}F(x^p)^{ip^{u-1}}p^{(p-i)u}G(x)^{p-i}\ equiv&F(x^p)^{p^u}pmod {p^{u+1}} end{aligned} ]最后一步转化与上面类似,那么即得原命题成立。
这样我们令 (A_0(x)=A(x)B(x)^{nmod p^{u-1}},B_0(x)=B(x)^{p^{u-1}},n'=[n/p^{u-1}]) ,就可以直接套用原来的方法计算了,复杂度 (mathcal O((p^uk)^2+T(p^{u-1}k)^2log_p n)) 。