您的位置:首页 > 运维架构

[BZOJ1604] [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居

2016-03-17 13:56 274 查看

传送门

http://www.lydsy.com/JudgeOnline/problem.php?id=1604

题目大意

给定n个点的坐标和C,若两个点间的曼哈顿距离≤C,就连一条边,询问联通块个数和最大联通块大小给定n个点的坐标和C,若两个点间的曼哈顿距离\le C,就连一条边,询问联通块个数和最大联通块大小

题解

曼哈顿距离转切比雪夫:(x,y)=(x+y,x−y)(x,y)=(x+y,x-y)

切比雪夫距离:max(|x1−x2|,|y1−y2|)max(|x_1-x_2|,|y_1-y_2|)

转化为切比雪夫距离后原条件变为:max(|x1−x2|,|y1−y2|)≤Cmax(|x_1-x_2|,|y_1-y_2|)\le C

暴力其实就是n2枚举两点判断,但其实我们只要将最近的点间连边就可以暴力其实就是n^2枚举两点判断,但其实我们只要将最近的点间连边就可以

转化为最大我们就可以排序维护一维判断另一维了转化为最大我们就可以排序维护一维判断另一维了

我们按照x轴坐标排序后依次将点加入队列中,维护队列头尾x轴坐标之差≤C,也就是队列中的点都相连我们按照x轴坐标排序后依次将点加入队列中,维护队列头尾x轴坐标之差\le C,也就是队列中的点都相连

同时将队列中的点按y轴坐标维护一棵Splay,对新加入的点找到它满足条件的的前驱后继并查集连边即可同时将队列中的点按y轴坐标维护一棵Splay,对新加入的点找到它满足条件的的前驱后继并查集连边即可

注意y轴坐标可能相同注意y轴坐标可能相同

CODE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: