/*
只是试试的,没想到……这都93MSac了?!才用1200+K的内存,
数据明显水嘛,那给那么大的范围干什么啊,还以为要离散
2012-07-16
*/
分析:
并查集。
这题……真无语,本来想着TLE、MLE了再优化,这代码只是试试的,没想到……这都93MSac了?!才用1200+K的内存,
数据明显水嘛,那给那么大的范围干什么啊,还以为要离散
化什么的辅助优化的……我晕了……
不过,1a挺好~
2012-07-16
*/
#include"stdio.h"
struct A
{
int num;
int pre;
}set[10000011];
void build(int n)
{
int i;
for(i=1;i<=n;i++) {set[i].num=1;set[i].pre=i;}
}
int find(int k)
{
if(set[k].pre==k) return k;
set[k].pre=find(set[k].pre);
return set[k].pre;
}
void Union(int f1,int f2)
{
set[f1].pre=f2;
set[f2].num+=set[f1].num;
}
int main()
{
int n;
int max;
int ans;
int i;
int x[100011];
int y[100011];
int f1,f2;
while(scanf("%d",&n)!=-1)
{
if(n==0) {printf("1\n");continue;}
max=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&x[i],&y[i]);
if(x[i]>max) max=x[i];
if(y[i]>max) max=y[i];
}
build(max);
for(i=1;i<=n;i++)
{
f1=find(x[i]);
f2=find(y[i]);
if(f1!=f2) Union(f1,f2);
}
ans=0;
for(i=1;i<=max;i++) if(set[i].num>ans) ans=set[i].num;
printf("%d\n",ans);
}
return 0;
}