P3101 [USACO14JAN] Ski Course Rating G 题解

Posted on 2024-03-02 17:01  _XOFqwq  阅读(5)  评论(0编辑  收藏  举报

看到这题很容易想到对于每个起点进行二分 + bfs check,但这样写显然 T 飞。

然后由此我们想到用并查集维护连通块做,

具体地,我们先建出图,令每个格子向其右、下格子连边,边权为高度绝对差,

然后将边权从小到大排序,

考虑每一条边,若其端点未被合并,则将它们合并为同一集合,

顺便维护连通块的大小 \(sz_x\) 与起点个数 \(v_x\)

若合并后集合大小 \(\ge T\),则两边的集合中大小 \(\le T\) 的,其对于答案的贡献即为 此集合的起点个数 \(\times\) 当前边的边权。直接累加贡献即可。

时间复杂度 \(O(MN \log MN)\)

代码。非常好写。