并查集水题,一开始超时了,把cin换成scanf就AC了
#include <iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<map>
using namespace std;
int pre[10000005];
int m[10000000];
int Find(int x)
{
int p,t;
p=x;
while(x!=pre[x])
x=pre[x];
while(p!=x)
{
t=pre[p];
pre[p]=x;
p=t;
}
return x;
}
void join(int a,int b)
{
int p=Find(a);
int q=Find(b);
if(p!=q)
{
pre[p]=q;
m[q]+=m[p];
}
}
int main()
{
int t;
while(cin>>t)
{
if(t==0)
{
cout<<"1"<<endl;
continue;
}
for(int i=1; i<=10000000; i++)
{
pre[i]=i;
m[i]=1;
}
int a,b;
int ma=-1;
while(t--)
{
scanf("%d %d",&a,&b);
join(a,b);
ma=max(ma,m[Find(b)]);
}
cout<<ma<<endl;
}
return 0;
}