考虑boruvka算法。我们需要进行O(nlog2n)次询问某个连通块内的某个点到其他连通块内的点的最小边权。
考虑如下做法:设当前点为x,我们需要知道min(ax+ay+∣bx−by∣)=ax+min(ay+∣bx−by∣)。考虑分bx>by,bx≤by讨论。假设bx>by(bx≤by)类似。我们要求ax+min(ay+bx−by)=ax+bx+min(ay−by)(x,y对应区间相交)。考虑给每个点i染色ci(ci是整数)。相同/不同连通块的颜色是相同/不同的。
考虑对li,ri扫描线。(因为不扫描线要4个log)。在我们插入某个区间时,这个区间会对其他不和它在同一个连通块内的区间产生贡献。而这个区间的最小出边也会被所更新。可以用如下数据结构维护:这个结构支持每次对于一个点x,查询满足bx>by,cx=cy(把cx=cy拆成cx>cy或者cx≤cy,就变成了二维平面的查询)的点y的ay−by的最小值,或者给定一个点y,将满足bx>by,cx=cy(cx>cy或者cx≤cy)的点x对ay−by取最小值。可以用嵌套线段树维护(要先删除再插入,否则不相交的区间会互相产生贡献)。时间复杂度是3个log。
不知道能不能过