qoj18373 Counting Trees
给定 \(2^k\) 个点的完全图,边 \((u,v)\) 带边权 \(w=u\oplus v\)。
给定权值 \(a_*,b_*\)。 一个生成树 \(T\) 的权值为
问,对于每个 \(d\),满足 \(d=\displaystyle\bigoplus_e w_e\) 的生成树边权之和。
考虑枚举 \(r\),计数 $ \displaystyle\bigoplus_e w_e=r $ 的答案,记为 \(ans_r\)。
令边带 \(ae^{zb}\) 的贡献,即可转化为边权之积,最后提取 \([z^q]\) 项系数即可。
考虑做 FWT,对 \(\widehat{ans}_r\) 求和,则边权为 \(d\) 的边额外贡献 \((-1)^{d\mathbin{\&} r}\) 的因子,记为 \(g_r(d)\),则边 \(d\) 贡献 \(f_r(d)=a_de^{zb_d}g_r(d)\)。
构造该图的 Laplace 矩阵,有:
不妨令 \(f_r(0)=0\),则有 \(A_{uu}=F_r=\displaystyle\sum_t f_r(t)\)。
应用矩阵树定理的特征值形式。

一个观察是,不妨取 \(h_s=[g_s(u)]^T\),则有。
于是有 \((F_r-F_{r\oplus s})\) 为其一特征值,由于 \(s\) 任意性。有:
\(F_r\) 不难 FWT 一次求得,其为关于 \(z\) 的 \(q+1\) 次多项式。
关于 \(\displaystyle\prod_{t\neq r}(a_r-a_t)\) 一类问题,有一类解法是:
先求多项式 \(P(x)=\displaystyle\prod_t(x-a_t)\),取其导数
则 \(\frac{\partial P}{\partial x}(a_r)\)中,\(i\neq r\) 的 \(\prod\) 均贡献 \(0\),其值即为所求。
那么利用多项式多点求值即可在 \(\mathcal O(n\log^2 n)\) 时间内求出答案。
回到原问题,想要套用上面那个方法,在多点求值的过程中需要处理 \(\left(\mathbb{F}_p[z]/(z^{q+1})\right)[x]\) 域上二维多项式的求逆等操作,比较麻烦。
可以先同样分治 NTT 求出 \(P\),然后取 \(p_i=[z^i]P\),注意这里 \(p_i\) 是关于 \(x\) 的 \(2^k\) 次多项式。
设系数 \(\alpha=[z^0]F_r\),\(\beta=F_r-\alpha\),取 \(\frac\partial{\partial x}P\) 在 \(\alpha\) 处的泰勒展开:
即可转化为关于 \(x\) 的单维多项式多点求值问题。
时间复杂度 \(\mathcal O(q^2k^22^k)\)。
代码太丑了不放了(?)10.1k
本文来自博客园,作者:CuteNess,转载请注明原文链接:https://www.cnblogs.com/CuteNess/p/22645787

浙公网安备 33010602011771号