[CSP-S 2025] 道路修复(road)题解
[CSP-S 2025] 道路修复(road)题解
知识点
状压,最小生成树(MST),归并。
分析
首先考虑缩小 \(m\),这个 trick 非常经典,在 P3639 [APIO2013] 道路费用 - 洛谷 (luogu.com.cn) 中就有,利用 Kruscal 贪心性质把不可能存在的边删去。
接下来直接考虑暴力一点,\(O(2^k)\) 先枚举所有点是否会被选,那么如果要做 Kruscal,我们可以对所有边排序,那么这个算法是 \(O(2^knk\log{(nk)})\) 的,非常慢。
那么我们考虑不用排序,其实就是在枚举之前就排完全部的边,那么时间复杂度来到了 \(O(2^kn(k+\alpha(n)))\)(好的这个解法比正解要快)。
再考虑优化,我们可以用状压的常用手段来处理,想要处理出选择 \(S\) 的 MST,我们可以考虑先求出 \(S\oplus \mathrm{lowbit}(S)\) 的 MST,再与 \(\mathrm{lowbit}(S)\) 的所有边归并一下,那么复杂度是 \(O(2^k(n+k)\alpha(n))\) 的。
那么 \(\alpha(n)\) 一般都固定到 \(4\),复杂度可以通过。
反思
- 还好有写快读。
- 想到了去除 \(\mathrm{lowbit}\) 的算法,但是没有想到归并 MST,这非常不对,导致我做后面两题的时候一直在想这个如何优化。
- 大概 \(45\) min 结束,但是由于需要卡过去导致后面都爆炸。

浙公网安备 33010602011771号