题目


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

Time Limit: 5 Sec  Memory Limit: 64 MB

Description

了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的时候有一个独一无二的位置坐标Xi,Yi(l≤Xi,Yi≤[1..10^9];Xi,Yi∈整数.当满足下列两个条件之一,两只奶牛i和j是属于同一个群的:
  1.两只奶牛的曼哈顿距离不超过C(1≤C≤10^9),即lXi - xil+IYi - Yil≤C.
  2.两只奶牛有共同的邻居.即,存在一只奶牛k,使i与k,j与k均同属一个群.
    给出奶牛们的位置,请计算草原上有多少个牛群,以及最大的牛群里有多少奶牛

Input

第1行输入N和C,之后N行每行输入一只奶牛的坐标.

Output

仅一行,先输出牛群数,再输出最大牛群里的牛数,用空格隔开.

Sample Input

4 2
1 1
3 3
2 2
10 10

* Line 1: A single line with a two space-separated integers: the
number of cow neighborhoods and the size of the largest cow
neighborhood.

Sample Output

2 3

OUTPUT DETAILS:
There are 2 neighborhoods, one formed by the first three cows and
the other being the last cow. The largest neighborhood therefore
has size 3.


题解


这题很明显就是再考并查集!【真的吗,你看下数据范围!】关于曼哈顿距离的技巧,将每个点变成(x+y,x-y)这样两个点之间的曼哈顿距离就是|x1-x2|+|y1-y2|,这样就可以维护一个平衡树,根据前驱和后继上面的节点来维护并查集求得答案了!


代码


  1. /*Author:WNJXYK*/
  2. #include<cstdio>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<string>
  6. #include<algorithm>
  7. #include<queue>
  8. #include<set>
  9. #include<map>
  10. using namespace std;
  11.  
  12. #define LL long long
  13. #define Inf 2147483647
  14. #define InfL 10000000000LL
  15.  
  16. inline void swap(int &x,int &y){int tmp=x;x=y;y=tmp;}
  17. inline void swap(LL &x,LL &y){LL tmp=x;x=y;y=tmp;}
  18. inline int remin(int a,int b){if (a<b) return a;return b;}
  19. inline int remax(int a,int b){if (a>b) return a;return b;}
  20. inline LL remin(LL a,LL b){if (a<b) return a;return b;}
  21. inline LL remax(LL a,LL b){if (a>b) return a;return b;}
  22.  
  23. inline int read(){
  24. int x=0,f=1;char ch=getchar();
  25. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  26. while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
  27. return x*f;
  28. }
  29. int n,c,ans,mx;
  30. int fa[100005],tot[100005];
  31. struct data{LL x,y;int id;}a[100005];
  32. multiset <data> b;
  33. set <data>::iterator it;
  34. inline bool operator<(data a,data b){
  35. return a.y<b.y;
  36. }
  37. inline bool cmpx(data a,data b){
  38. return a.x<b.x;
  39. }
  40. int find(int x){
  41. return x==fa[x]?x:fa[x]=find(fa[x]);
  42. }
  43. inline void un(int x,int y){
  44. int p=find(x),q=find(y);
  45. if(p!=q){
  46. fa[p]=q;
  47. ans--;
  48. }
  49. }
  50. void solve(){
  51. b.insert((data){0,InfL,0});b.insert((data){0,-InfL,0});
  52. int now=1;b.insert(a[1]);
  53. for(int i=2;i<=n;i++){
  54. while(a[i].x-a[now].x>c){
  55. b.erase(b.find(a[now]));
  56. now++;
  57. }
  58. it=b.lower_bound(a[i]);
  59. data r=*it,l=*--it;
  60. if(a[i].y-l.y<=c)
  61. un(a[i].id,l.id);
  62. if(r.y-a[i].y<=c)
  63. un(a[i].id,r.id);
  64. b.insert(a[i]);
  65. }
  66. }
  67. int main(){
  68. n=read();c=read();ans=n;
  69. for(int i=1;i<=n;i++)fa[i]=i;
  70. for(int i=1;i<=n;i++){
  71. int t1=read(),t2=read();
  72. a[i].x=t1+t2,a[i].y=t1-t2;a[i].id=i;
  73. }
  74. sort(a+1,a+n+1,cmpx);
  75. solve();
  76. for(int i=1;i<=n;i++)
  77. tot[find(i)]++;
  78. for(int i=1;i<=n;i++)
  79. mx=max(mx,tot[i]);
  80. printf("%d %d\n",ans,mx);
  81. return 0;
  82. }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居

    [算法]并查集+平衡树+数学+扫描线 [题解] 经典曼哈顿距离转切比雪夫距离. 曼哈顿距离:S=|x1-x2|+|y1-y2|<=c 即:max(x1-x2+y1-y2,x1-x2-y1+y2, ...

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

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

随机推荐

  1. loadRunner 11.0 安装及破解

    http://jingyan.baidu.com/article/20095761b31b58cb0621b463.html 破解时必须是管理员账户登录.

  2. Grunt的配置和使用(一)

    Grunt的配置和使用(一) Grunt 和 Grunt 的插件都是通过 Node.js 的包管理器 npm 来安装和管理的.为了方便使用 Grunt ,你应该在全局范围内安装 Grunt 的命令行接 ...

  3. !!!易控INSPEC组态软件开发小结——-一次工程文件损坏和处理经过

    从加入红橡开始熟悉和使用易控(INSPEC)组态软件,值得赞扬的是INSPEC的开放性和对C#语言的支持,除此之外,便也没有感觉它与其他组态软件有太多优势,有人说INSPEC软件授权比国内其他同类的组 ...

  4. If We Were a Child Again

    Description The Problem The first project for the poor student was to make a calculator that can jus ...

  5. 提高PHP编程效率

    1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row['id']的速度是$row[id]的7倍. 3.echo比print快,并且使用echo的多重 ...

  6. mysql server5.6.28 修改数据目录

    1.查看配置文件 mysql --help | grep my.cnf 列出使用哪个配置文件(顺序推) 2.service mysql stop 3.创建新目录 mkdir /data 4.迁移之前的 ...

  7. fork出的子进程和父进程的继承关系【转载】

    [原文地址]http://blog.163.com/dengjingniurou@126/blog/static/53989196200962924412524/ fork出的子进程和父进程的继承关系 ...

  8. 高质量程序设计指南C/C++语言——内存管理

    • free()和delete只是把指针所指的内容给释放掉,并没有把指针本身删掉.指针被free()或delete以后其地址仍然不变(不等于NULL),只是该地址对应的内存是垃圾——p成了野指针.如果 ...

  9. Spring 基于注解的装配

    xml头文件 xmlns:context="http://www.springframework.org/schema/context" 扫描包:<context:compo ...

  10. 安装 Rational Rose 启动报错:无法启动此程序,因为计算机中丢失 suite objects.dll

    安装完以后提示找不到 suite objects.dll: 经查找,该 dll 存在: 找不到的原因是,安装程序自动设置在 Path 中的环境变量有误: 把最后的 common 改成 Common: ...