看到这题很容易想到对于每个起点进行二分 + bfs check,但这样写显然 T 飞。
然后由此我们想到用并查集维护连通块做,
具体地,我们先建出图,令每个格子向其右、下格子连边,边权为高度绝对差,
然后将边权从小到大排序,
考虑每一条边,若其端点未被合并,则将它们合并为同一集合,
顺便维护连通块的大小 \(sz_x\) 与起点个数 \(v_x\),
若合并后集合大小 \(\ge T\),则两边的集合中大小 \(\le T\) 的,其对于答案的贡献即为 此集合的起点个数 \(\times\) 当前边的边权。直接累加贡献即可。
时间复杂度 \(O(MN \log MN)\)。
代码。非常好写。