洛谷 P6624
给定一张 \(n\) 个点 \(m\) 条边的无向图,边带边权 \(w_i\)。对于一棵生成树 \(T\),其权值为:
\[val(T) = (\sum\limits_{e \in T} w_e) \cdot \gcd \limits_{e \in T} w_e \]求所有生成树权值之和对 \(998244353\) 取模的结果。
\(n \le 30, w \le 152501(V = 152501)\)
首先用莫比乌斯反演处理掉 \(\gcd\)(利用 \(Id = \varphi * I\)):
枚举 \(d\) 后,把 \(d | w_e\) 的边提取出来,形成了一张新的图 \(G\)。问题转化为求 \(G\) 所有生成树的权值和。
如果 \(val(T)\) 中的求和部分改为 \(1 / \prod\limits_{e \in T} w_e\),就是一个矩阵树定理的板子题。
对于加法,解决方式是我们构造一个多项式:\((1 + wx)\),那么答案就是 \([x^1]\)。
对于多项式的运算,加减直接算即可,简单说一下乘、除(省略高于 \(x\) 的项):
\((a + bx)(c + dx) = ac + (ad + bc)x\)。
\(\dfrac{a + bx}{c + dx} = \dfrac{a}{c} + (\dfrac{b}{c} - \dfrac{ad}{c^2})x\)。
除法解释一下,我们对于多项式 \(c + dx\) 求逆,待定系数: \((C + Dx)(c + dx) \equiv 1 \pmod {x^2}\)(不用管二次项),得到:
记得:\(C = \frac{1}{c}, D = -\frac{d}{c^2}\),带到上面即可。
所以高斯消元的的时候,要满足 \(A_{i, i}\) 的常数项不为 \(0\),才能求逆元。如果都是 \(0\),行列式的值也未必是 \(0\),要特判一下,对于一次项做普通的消元即可。(洛谷不卡,偷懒没写。)
重载运算符即可直接暴力求行列式了。
时间复杂度:\(O(n^3V)\),可能可以通过。
有一个巨大的优化是,如果 \(d | w_e\) 的 \(e\) 的数量不足 \(n - 1\),就没有生成树,不用做了。这样只有至多 \(O(\frac{\sum\sigma(w)}{n - 1})\)个 \(d\) 了,而且跑不满,足以通过。(\(w_e\) 最多 \(144\) 个约数)
时间复杂度:\(O(n^2\sum \sigma w)\)
这个题似乎是两个割裂的部分拼起来的。
浙公网安备 33010602011771号