【算法】并查集+平衡树+数学+扫描线

【题解】

经典曼哈顿距离转切比雪夫距离。

曼哈顿距离:S=|x1-x2|+|y1-y2|<=c

即:max(x1-x2+y1-y2,x1-x2-y1+y2,-x1+x2+y1-y2,-x1+x2-y1+y2)

X1=x1+y1,Y1=x1-y1,则转化为

切比雪夫距离:S=max(|X1-X2|,|Y1-Y2|)<=c。

为什么要转化为切比雪夫距离?因为这种形式很容易操作。

想象两者的几何意义,哈夫曼距离<=c是竖着的正方形,而切比雪夫距离<=c是以一个点为中心的正方形(边平行于坐标轴)。

则问题转化为询问每个正方形,其内部包含的点,经典扫描线

不过对于这题来讲,还需要一些小技巧来实现传递性

首先一维排序,另一维用平衡树维护,也就是将排序后的点依次在平衡树上找到前驱和后继,然后再加入平衡树。

这样做就是对于每个点(x,y),在<x的点中找到<y的第一个点和>y的第一个点连边并加入并查集(相等看x)。

从而,每个点只向前面连边,而y只向前面的相邻的点连边,最大限度避免重复统计。

复杂度O(n log n)。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cctype>
  5. #include<set>
  6. using namespace std;
  7. const int maxn=;
  8. struct cyc{
  9. int y,d;
  10. bool operator < (const cyc &a)const{
  11. return y<a.y||(y==a.y&&d<a.d);
  12. }
  13. };
  14. struct node{int x,y;}a[maxn];
  15. set<cyc>s;
  16. set<cyc>::iterator it;
  17. int fa[maxn],n,c,b[maxn];
  18. int read(){
  19. char c;int s=,t=;
  20. while(!isdigit(c=getchar()))if(c=='-')t=-;
  21. do{s=s*+c-'';}while(isdigit(c=getchar()));
  22. return s*t;
  23. }
  24. int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
  25. bool cmp(node a,node b){return a.x<b.x;}
  26. int main(){
  27. n=read();c=read();
  28. for(int i=;i<=n;i++){
  29. a[i].x=read();a[i].y=read();
  30. a[i]=(node){a[i].x+a[i].y,a[i].x-a[i].y};
  31. }
  32. sort(a+,a+n+,cmp);
  33. int l=;
  34. s.insert((cyc){a[].y,});
  35. for(int i=;i<=n;i++)fa[i]=i;
  36. for(int i=;i<=n;i++){//一边往前,一边两端
  37. while(a[i].x-a[l].x>c)s.erase((cyc){a[l].y,l}),l++;
  38. it=s.lower_bound((cyc){a[i].y,i});
  39. if(it!=s.end()&&it->y-a[i].y<=c&&find(i)!=find(it->d))fa[fa[i]]=fa[it->d];
  40. if(it!=s.begin()&&a[i].y-(--it)->y<=c&&find(i)!=find(it->d))fa[fa[i]]=fa[it->d];
  41. s.insert((cyc){a[i].y,i});
  42. }
  43. int mx=,num=;
  44. for(int i=;i<=n;i++)b[find(i)]++;
  45. for(int i=;i<=n;i++)if(b[i]){
  46. num++;
  47. if(b[i]>mx)mx=b[i];
  48. }
  49. printf("%d %d",num,mx);
  50. return ;
  51. }

【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居的更多相关文章

  1. BZOJ 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居

    题目 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Time Limit: 5 Sec  Memory Limit: 64 MB Description ...

  2. bzoj 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(set+并查集)

    Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的 时候有一个独一无二的位置坐标Xi,Yi( ...

  3. bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居——排序+贪心+set

    Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的时候有一个独一无二的位置坐标Xi,Yi(l ...

  4. BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居:队列 + multiset + 并查集【曼哈顿距离变形】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1604 题意: 平面直角坐标系中,有n个点(n <= 100000,坐标范围10^9) ...

  5. bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 曼哈顿生成树

    大致题意:统计平面上由曼哈顿距离小于等于c的点对组成联通块的个数. 曼哈顿生成树的模板题.有关讲解:http://blog.csdn.net/acm_cxlove/article/details/88 ...

  6. bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居【切比雪夫距离+并查集+multiset】

    参考:http://hzwer.com/4361.html 坐标开long long,inf开大点 先曼哈顿转切比雪夫(x+y,x-y),距离就变成了max(x',y'): 先按x排序,维护两个指针, ...

  7. BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Treap

    题意:链接 方法: Treap 解析: 前几道资格赛的题水的不行,这道Gold的题就够分量辣. 首先这个曼哈顿距离啥的肯定能做文章,怎么转化是个问题,自己玩了一会没玩出来,就查了查曼哈顿距离的转化,发 ...

  8. 【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(set+并查集+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1604 这题太神了... 简直就是 神思想+神做法+神stl.. 被stl整的我想cry...首先,, ...

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

    [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 试题描述 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发 ...

随机推荐

  1. kindeditor 限制上传图片大小及宽高

    进入:/kindeditor/plugins/image/image.js,替换其中的 self.plugin.imageDialog = function (options)方法,代码为: self ...

  2. CTS测试笔记

    电脑安装12.4乌班图系统 更新源 (1) 打开ubuntu software center (2) 电脑左上角选择edit→software sources…→点击download from,选择o ...

  3. 【多校联合】(HDU6045)Is Derek lying?

    分析 之前没有想到题目解法,看了题解才会,记录一下思考过程. 这条题目的实质是,在满足合法的情况下,有没有a和d的可行解?也就是说,不要仅仅附在表面的思考逻辑条件,而是要思考实际的数学表达. 转化为数 ...

  4. Linux 文件属性及修改权限

    输入 ll 或 ls -l 命令显示当前目录中文件的属性及文件所属的用户和组 root@user:/home/www# ll test total 880 drwxr-xr-x 2 root root ...

  5. Structure From Motion(SFM,从运动恢复结构)

    Structure From Motion(SFM,从运动恢复结构) 阅读相关文献: Wu et al. Multicore Bundle Adjustment Agarwal et. al. Bun ...

  6. BZOJ 4029 HEOI2015 定价 数位贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4029 题意概述:对于一个数字的荒谬程度定义如下:删除其所有的后缀0,然后得到的数字长度为a ...

  7. HDU 4729 An Easy Problem for Elfness(主席树)(2013 ACM/ICPC Asia Regional Chengdu Online)

    Problem Description Pfctgeorge is totally a tall rich and handsome guy. He plans to build a huge wat ...

  8. 并查集——poj1182(带权并查集高阶)

    题目链接:食物链 题解:点击 说一声:这题关系推导值得学习.

  9. 关于百度Editor富文本编辑器 自定义上传位置

    因为要在网站上编辑富文本数据,所以直接采用百度的富文本编辑器,但是这个编辑器有个缺点,默认情况下,文件只能上传到网站的根目录,不能自定义路径. 而且json配置文件只能和controller.jsp在 ...

  10. 重写page的OnInit(学习中总结的)

    在写b/s框架的系统的时候,我们会发现,我们经常会在不同的网页中验证Session是否存在,,而我这里没有用Session,用的是MemCache技术,其实它就是键值对. 只不过将Memcache中的 ...