并查集一大水题
定义一个全局数组用来存储每个帮派内有多少人即可
可以先到hdu3635里面取一下经
直接上代码吧,没啥好说的
还是再说一点吧,前面卡了一下,因为没有注意小细节,当输入的x,y已经在同一个帮派内的时候,记得continue,hud里面有这种测试类型的。
#include<iostream>
#include<cstring>
using namespace std;
const long MAX=10000010;
long s[MAX];
long sum[MAX];
void init_set();
int find_set(int);
void mege_set(int,int);
int find_max();
int main()
{
int N;
while(~scanf("%d",&N)){
init_set();
while(N--){
int x,y;
scanf("%d %d",&x,&y);
x=find_set(x);
y=find_set(y);
if(x==y){
continue;
}else{
mege_set(x,y);
}
}
printf("%d\n",find_max());
}
}
void init_set()
{
for(int i=0;i<MAX;i++){
s[i]=i;
sum[i]=1;
}
}
int find_set(int x)
{
int r=x;
while(r!=s[r]){
r=s[r];
}
int j=x;
while(j!=s[r]){
x=s[j];
s[j]=r;
j=x;
}
return r;
}
void mege_set(int x,int y)
{
s[x]=s[y];
sum[y]+=sum[x];
sum[x]=0;
}
int find_max()
{
int m=0;
for(int i=0;i<MAX;i++){
m=sum[i]>m? sum[i]:m;
}
return m;
}