传送门:bzoj1604
题解
很妙啊!
曼哈顿距离转切比雪夫距离算是个套路了,但是还是很难想到。
(曼哈顿距离同时限制着两个维度的值,而切比雪夫距离对问题实施了降维打击,因为可以排序做到强制一维合法,只处理另一维的信息)
考虑 ( x , y ) (x,y) (x,y)转成 ( x + y , x − y ) (x+y,x-y) (x+y,x−y),则 ( i , j ) (i,j) (i,j)有连边当且仅当 m a x ( ∣ x i − x j ∣ , ∣ y i − y j ∣ ) ≤ C max(|x_i-x_j|,|y_i-y_j|)\leq C max(∣xi−xj∣,∣yi−yj∣)≤C。
将点按 x x x升序排序, s e t set set动态维护和当前点 i i i的 x x x坐标差值 ≤ C \leq C ≤C的点的 y y y坐标,找到 y i y_i yi的前驱后继,如果距离 ≤ C \leq C ≤C则合并(并查集维护连通性)。