会发现,无论操作的顺序怎么样,每个节点形成的区域都是个矩形。
发现两个点连通要行/列同时连通。
假设行向左走(x),右走(y)次,则(x+ygeq X)坐标差绝对值。
我们只需要关心(x+y),所以把边权设为这个值。
(Y)坐标类似。
暴力连边边数达到((nm)^2),不可接受。
但是发现如果存在三个点((a,b),(c,d),(e,f)aleq cleq e,bleq dleq f),则只需要把((a,b)->(c,d),(c,d)->(e,f))连边。
考虑枚举每个点。
以所有点在当前点左上方为例。维护一个值为(Y)的单调栈,表示单增点集。
在弹栈时把栈顶和当前点连边。
发现这样子边数变成了(nm)。
接下来考虑怎么求出答案。
问题变成了:需要确定两个值(a,b),把(Xleq a,Yleq b)的边插入,使得整个图连通且(a+b)最小。
这是经典的魔法森林问题,可以用LCT维护。