【题解】P8260 [CTS2022] 燃烧的呐球
考虑 boruvka 算法。
\(D(a,b)+D(b,a)=\begin{cases} s_a-s_b&b\in \mathrm{sub}_a\\s_b-s_a&a\in{\mathrm {sub}_b}\\s_a+s_b &\mathrm{otherwise} \end{cases}\)
注意到是最小生成树,所以我们只要求不把前两个 case 弄混就好。
那么分讨:
- 两个都是 case 3。
- 恰有一维是 case 1,2:dfs 时维护祖先链/子树最小值。
- 两维都是 case 1,2:
- 两维都是祖先:线段树合并,第二维的子树限制变为 dfn 区间查询。
- 一维是祖先:后代那一维 dfs,祖先维做 dfn 区间查询,回溯时撤销。
- 两维都是后代:dfs 到 \(x_i\) 的时候,对于 \(y_i\) 的子树 dfn 区间进行 chkmin,回溯时撤销。
所有值都是需要维护两种颜色的。总复杂度 2log。
浙公网安备 33010602011771号