关于此题的一个小想法
查看原帖
关于此题的一个小想法
40078
Effulgent楼主2024/10/2 23:49

考虑boruvka算法。我们需要进行O(nlog2n)O(n\log_2n)次询问某个连通块内的某个点到其他连通块内的点的最小边权。

考虑如下做法:设当前点为xx,我们需要知道min(ax+ay+bxby)=ax+min(ay+bxby)\min(a_x+a_y+|b_x-b_y|)=a_x+\min(a_y+|b_x-b_y|)。考虑分bx>byb_x>b_ybxbyb_x\leq b_y讨论。假设bx>byb_x>b_ybxbyb_x\leq b_y)类似。我们要求ax+min(ay+bxby)=ax+bx+min(ayby)a_x+\min(a_y+b_x-b_y)=a_x+b_x+\min(a_y-b_y)x,yx,y对应区间相交)。考虑给每个点ii染色cic_icic_i是整数)。相同/不同连通块的颜色是相同/不同的。

考虑对li,ril_i,r_i扫描线。(因为不扫描线要4个log)。在我们插入某个区间时,这个区间会对其他不和它在同一个连通块内的区间产生贡献。而这个区间的最小出边也会被所更新。可以用如下数据结构维护:这个结构支持每次对于一个点xx,查询满足bx>by,cxcyb_x>b_y,c_x\neq c_y(把cxcyc_x\neq c_y拆成cx>cyc_x>c_y或者cxcyc_x\leq c_y,就变成了二维平面的查询)的点yyaybya_y-b_y的最小值,或者给定一个点yy,将满足bx>by,cxcyb_x>b_y,c_x\neq c_ycx>cyc_x>c_y或者cxcyc_x\leq c_y)的点xxaybya_y-b_y取最小值。可以用嵌套线段树维护(要先删除再插入,否则不相交的区间会互相产生贡献)。时间复杂度是3个log。

不知道能不能过

2024/10/2 23:49
加载中...