并查集

并查集

并查集
有n个罪犯,起初不知道他们属于哪个团伙,但是有m条线索说明这n个人之间有联系。
每条线索都说明两个人之间的联系,请根据此m条线索判断共有几个犯罪团伙

输入样例:
n个罪犯,m条线索
10 9
线索:
1 2
3 4
5 2
4 6
2 6
8 7
9 7
1 6
2 4
输出:
3

#include
int A[100]={0};
int ave(int x)        //递归找boss函数
{
if(A[x]==x)return x;
else 
{
int a=ave(A[x]);
A[x]=a;       //回头路上顺便让所有人归顺同一大哥
return a;
}
}
int main()
{
int a,b,c,n,m,flag,flag1,sum=0; 
scanf("%d%d",&n,&m);
for(a=1;a<=n;a++)A[a]=a;
for(a=0;a<m;a++)
{
scanf("%d%d",&b,&c);
flag=ave(A[b]);
flag1=ave(A[c]);
if(flag!=flag1)           //靠左原则  以左边为大
{
 A[flag1]=flag;
}
}
for(a=1;a<=n;a++){          //便利看共有几个团伙
if(A[a]==a)sum++;
  }
printf("%d\n",sum);
return 0;
} 

你可能感兴趣的:(并查集,并查集)