专栏文章

题解:P9531 [JOISC 2022] 复兴计划

P9531题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miny1tyq
此快照首次捕获于
2025/12/02 10:13
3 个月前
此快照最后确认于
2025/12/02 10:13
3 个月前
查看原文
y=xwiy=|x-w_i| 的图像画出来,会形如以 (wi,0)(w_i,0) 为定点的一个斜率为 11 的倒 V 型,并且容易发现 y=xwiy=|x-w_i|y=xwjy=|x-w_j| 只会有一个交点。大胆猜测对于原图每条边,以这条边作为最小生成树的 xx 形成一个连续区间。
考虑如何说明这件事。对于一个 xxxwi|x-w_i| 的最小生成树可以看作两棵最小生成树合并:
  1. 对于 wi<xw_i<xwiw_i 的最大生成树
  2. 对于 wixw_i\ge xwiw_i 的最小生成树
因此,一个直观的感受是 xwi|x-w_i| 的最小生成树的 wiw_i 会在值域上呈连续的一段。将 wiw_i 按从小到大排序扫一遍,设当前扫到 ii,我们从 i1i-1 开始倒着枚举并查集维护加边直到和 (ui,vi,wi)(u_i,v_i,w_i) 这条边形成环,令加边后出现环的这条边为 wjw_j,即这个环内的最小边权。实际考虑一个前缀的最小生成树是必然会从这个环中断边,对 xx 的取值进行分讨:
x<wjx<w_j,则 wj,wj+1,,wi1w_{j},w_{j+1},\dots,w_{i-1}wiw_i 更优,因为这部分比 xx 大所以做的是最小生成树,按照 kruskal 的加边顺序到 wiw_i 会成环所以死掉了。
x>wix>w_i,则 wj+1,wj+2,,wiw_{j+1},w_{j+2},\dots,w_iwjw_j 更优,因为这部分比 xx 小所以做的是最大生成树,按照 kruskal 的加边顺序到 wjw_j 会成环所以死掉了。
x[wj,wi]x\in [w_j,w_i],考虑什么时候 wiw_i 能比 wjw_j 更优,即 wix<xwjw_i-x<x-w_j,解得 x>wi+wj2x>\frac{w_i+w_j}{2},因此若 x[wj,wi+wj2]x\in [w_j,\frac{w_i+w_j}{2}] 则按照加边顺序最大生成树至少会加到 wjw_j,而最小生成树部分若加到 wiw_i 则合并时会形成环而 wjx<wix|w_j-x|<|w_i-x| 因此 wiw_i 死掉了;否则相反,在 x>wi+wj2x>\frac{w_i+w_j}{2}wiw_i 会替代掉 wjw_jwjw_j 对答案的贡献终止,wiw_i 对答案的贡献开始。
通过这个方法可以找出对于每条边 wiw_i 其贡献区间 [li,ri][l_i,r_i] 代表若 x[li,ri]x\in [l_i,r_i]wiw_i 会在 xwi|x-w_i| 的最小生成树中。这个构造同时也证明了贡献形成连续一段的正确性。问题转换成 x[li,ri]xwi\sum\limits_{x\in [l_i,r_i]}|x-w_i|,还是把绝对值拆开,对 wiw_i 的贡献分讨:
  1. x<lix<l_i:无贡献;
  2. lixwil_i\le x\le w_i:贡献为 wixw_i-x
  3. wi<xriw_i<x\le r_i:贡献为 xwix-w_i
  4. x>rix>r_i:无贡献;
显然 x=wix=w_iwiw_i 会被贡献,于是 liwiril_i\le w_i\le r_i,这个拆区间是不重不漏的。将答案写成 kx+bkx+b 的形式,接下来直接维护两个差分数组 k,bk,b,分别区间加即可。询问时由于保证 xx 单增,可以维护一个单调的指针往右移,加上指针位置差分数组的贡献即可。这里值域会很大,可以离散化或者直接 map
复杂度为 O(nm+qlogm)O(nm+q\log m)。说明一下为什么第一部分不是 O(m2)O(m^2),注意到每次那个出现环的位置 jj 的移动量与当前生成森林大小变化量同级,因此均摊下来每次只需枚举 nn 个位置就可以找到环。

评论

0 条评论,欢迎与作者交流。

正在加载评论...