「loj - 2983」「WC2019」数树
若两棵树边集的交集为 \(S\),则答案等于 \(y^{n - |S|}\)。
op = 0
。
op = 1
设 \(f(S)\) 表示交集为 \(S\) 的答案,反演 \(f(S) = \sum_{S\subseteq T}(-1)^{|T|-|S|}g(T)\)。
化一下式子:
记 \(u = (y^{-1} - 1)\),则答案为 \(y^n\times (\sum_{T}g(T)u^{|T|})\)。
设 \(T\) 中的边将原图连成了大小分别为 \(a_1, a_2, \dots a_k\) 的 \(k = n - |T|\) 个连通块,容易发现方案数只和 \(\{a_i\}\) 有关。
利用 prufer 序列进行计数:
\[\begin{aligned} &\sum_{\sum_{i=1}^{k}p_i=k-2}\frac{(k-2)!}{\prod_{i=1}^{k}p_i!}\prod_{i=1}^{k}a_i^{p_i+1}\\ =&\left(\prod_{i=1}^{k}a_i\right)\times \left((k-2)![x^{k-2}]\exp(\sum a_ix)\right)\\ =&\prod_{i=1}^{k}a_i\times (\sum_{i=1}^{k}a_i)^{k-2} \\ =&\prod_{i=1}^{k}a_i\times n^{k-2} \\ \end{aligned} \]因此 \(g(T) = n^{k-2}\times\prod_{i=1}^{k}a_i\)。
将 \(g(T)\) 代入,得到 \(y^n\times (\sum_{T}\prod_{i=1}^{k}a_i\times n^{k-2}u^{n-k})\)。
已经可以做 \(O(n^2)\) 的树形 dp 了。
考虑其组合意义:大小为 \(a_i\) 的连通块里面选一个贡献 \(n\times u^{-1}\),于是可以做 \(O(n)\) 的树形 dp。
\(u^{-1}\) 里面含有因子 \(1 / (1 - y)\),特判 \(y = 1\)。
op = 2
感觉可以对上一种情况中的 dp 数组列生成函数式,解个微分方程什么的。
然而过得太久我完全忘完了,推不出来(扶额)。没办法,还是用常规的那一套吧。
大家可以去试试,理论上能够解出和下面一样的结果。
如果已知 \(\{a_i\}\),答案可以表示成 \(A\times \frac{1}{k!}\frac{n!}{\prod a_i!}h(a_i)\),其中 \(A\) 是一个常数。
注意到这里有两棵树,所以 \(h(a_i), A\) 的表达式与上文不同(相应系数要平方)。
这里 \(\frac{1}{k!}\) 可以这么理解:我们方案数实际上计算的是第 \(i\) 个连通块 \(a_i\) 染上第 \(i\) 种颜色的方案数。然而真正的方案数不包括染色方案数,所以需要去重。
冷静一下,你发现这就是对 \(h(i)\) 的 EGF(指数型生成函数)\(H(x) = \sum h(i)\frac{x^i}{i!}\) 做 \(\exp H = \sum \frac{H^i}{i!}\) 运算。
然后套板子即可。