// 九度:1444
// 并查集
//
// 数据太大,多次遍历,存在超时
// 共3次遍历操作,虽然使用了sort,DP。但是本机运行时2s多,
// 所以说超时很严重了,正常情况下时间不超过1s才对
// 第二种算法,在跟节点的对应位置记录本集合的节点数量,
// 这样,共2次遍历,没有sort。时间节约了很多。0.5s一下
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define SIZE 10000005
using namespace std;
int Tree[SIZE];
void Init()
{
for(int i=1; i<SIZE; i++)
{
Tree[i]=i;
}
}
int Getfa(int x)
{
if(x == Tree[x])
return x;
else
Tree[x] = Getfa(Tree[x]);
return Tree[x];
}
int main()
#ifdef ONLINE_JUDGE
{
#else
freopen("E:\\in.txt", "r", stdin);
//freopen("E:\\out.txt", "w", stdout);
#endif
int n;
while(scanf("%d", &n)!= EOF)
{
Init();
int x, y;
while(n-->0)
{
scanf("%d %d", &x, &y);
if(Getfa(x) != Getfa(y))
{
Tree[Getfa(x)] = Getfa(y);
}
}
for(int i=1;i<SIZE; i++)
{
Getfa(i);
}
sort(Tree+1,Tree+SIZE);
/*
for(int i=1;i<SIZE; i++)
{
printf("%d ", Tree[i]);
}
*/
int max=0, imax=1;
for(int i=2;i<SIZE; i++)
{
if(Tree[i] == Tree[i-1])
{
imax++;
}
else
{
if(imax > max)
{
max=imax;
}
imax=1;
}
}
printf("%d\n", max);
}
return 0;
}
#include <stdio.h>
#include <algorithm>
#define SIZE 10000001
using namespace std;
int Tree[SIZE];
int sum[SIZE];
void Init()
{
for(int i=1; i<SIZE; i++)
{
Tree[i]=i;
sum[i] =1;
}
}
int Getfa(int x)
{
if(x == Tree[x])
return x;
else
Tree[x] = Getfa(Tree[x]);
return Tree[x];
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
//freopen("E:\\out.txt", "w", stdout);
#endif
int n;
while(scanf("%d", &n)!= EOF)
{
Init();
int x, y;
while(n-->0)
{
scanf("%d %d", &x, &y);
int a=Getfa(x);
int b=Getfa(y);
if(a!=b)
{
Tree[a] =b;
sum[b]+=sum[a];//把另外一个集合中的数量添加过来
}
}
int max=0;
for(int i=1; i<SIZE;i++)
{
if(Tree[i]== i && sum[i]>max)
max = sum[i];
}
printf("%d\n", max);
}
return 0;
}