传送门
http://www.lydsy.com/JudgeOnline/problem.php?id=1604
题目大意
给定n个点的坐标和C,若两个点间的曼哈顿距离≤C,就连一条边,询问联通块个数和最大联通块大小
题解
曼哈顿距离转切比雪夫:
(x,y)=(x+y,x−y)
切比雪夫距离:
max(|x1−x2|,|y1−y2|)
转化为切比雪夫距离后原条件变为:
max(|x1−x2|,|y1−y2|)≤C
暴力其实就是n2枚举两点判断,但其实我们只要将最近的点间连边就可以
转化为最大我们就可以排序维护一维判断另一维了
我们按照x轴坐标排序后依次将点加入队列中,维护队列头尾x轴坐标之差≤C,也就是队列中的点都相连
同时将队列中的点按y轴坐标维护一棵Splay,对新加入的点找到它满足条件的的前驱后继并查集连边即可
注意y轴坐标可能相同
CODE