题目地址:HDU 1856

水题。因为标号范围太大,而数据数仅仅有10w,所以要先进行离散化。然后就是裸的并查集了。

代码例如以下:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include <algorithm> using namespace std;
int bin[100001], x[100001], y[100001], z[200001], c[200001], cnt, vis[200000];
int find1(int x)
{
return bin[x]==x?x:bin[x]=find1(bin[x]);
}
void merger(int x, int y)
{
int f1=find1(bin[x]);
int f2=find1(bin[y]);
if(f1!=f2)
bin[f2]=f1;
}
int twofen(int x)
{
int high=cnt-1, low=0, mid;
while(low<=high)
{
mid=low+high>>1;
if(c[mid]==x) return mid;
else if(c[mid]<x) low=mid+1;
else high=mid-1;
}
}
int main()
{
int n, i, max1, a, b, f1, f2;
while(scanf("%d",&n)!=EOF)
{
cnt=1;
for(i=0;i<n;i++)
{
scanf("%d%d",&x[i],&y[i]);
z[2*i]=x[i];
z[2*i+1]=y[i];
}
sort(z,z+2*n);
c[0]=z[0];
for(i=1;i<2*n;i++)
{
if(z[i]!=z[i-1])
c[cnt++]=z[i];
}
for(i=0;i<cnt;i++)
bin[i]=i;
for(i=0;i<n;i++)
{
f1=twofen(x[i]);
f2=twofen(y[i]);
merger(f1,f2);
}
memset(vis,0,sizeof(vis));
max1=-1;
for(i=0;i<cnt;i++)
{
int p=find1(bin[i]);
vis[p]++;
if(max1<vis[p])
max1=vis[p];
}
printf("%d\n",max1);
}
return 0;
}

最新文章

  1. 如何用hypermesh生成包含interface的流体网格
  2. sql server2008安装说明 详细完整版
  3. UIbutton 和UIview 切单角
  4. CS6破解
  5. 值得珍藏的.NET源码,不保存就没机会了
  6. spring websocket Converters must not be empty
  7. JS中的replace方法以及与正则表达式的结合应用
  8. Qt编译慢吗?
  9. c语言实现atoi和itoa函数。
  10. Pandas(python)数据处理:只对某一列DataFrame数据进行归一化
  11. javascript中的内存管理和垃圾回收
  12. Js-函数式编程
  13. Web开发人员vs网页设计师
  14. Lua数据类型
  15. 下载安装tomcat和jdk,配置运行环境,与Intellij idea 2017关联
  16. python--calc计算器的小程序
  17. &lt;&lt;APUE&gt;&gt; 线程
  18. python面向对象(类的成员及类方法)
  19. UVa 11021 麻球繁衍
  20. java map的 keyset()方法

热门文章

  1. USM锐化之openCV实现,附赠调整对比度函数
  2. MySQL 更新走全表和索引的评估记录数
  3. 当Scheduler拿不到url的 时候,不能立即退出
  4. 慎得慌风 656ik67o
  5. 在qt中用tcp传输xml消息
  6. android--手机桌面添加网址链接图标(解决方式)
  7. Andorid Clip 实现自定义的进度条效果实例
  8. appium简明教程
  9. Xcode如何添加字体库--
  10. 初尝Java序列化/反序列化对象