朋友圈
描述
有n个人,编号1-n。
现在有一个舞会,在舞会上,大家会相互介绍自己的朋友。
即: 如果a认识b,b认识c。那么在舞会上,a就会通过b认识到c。
现在,给出m个关系
每个关系描述:
a b
表示 编号为a和编号为b的人是朋友关系。
格式
输入格式
输入n和m
接下来m行,每行为a b
输出格式
最后问,会有多少个朋友圈。
样例
样例输入 Copy
5 3
1 2
2 3
4 5
样例输出 Copy
2
#include<stdio.h>
int fun(int a[],int n)
{//找老大
if(a[n]==n) return n;
a[n]=fun(a,a[n]);
return a[n];
}
int main()
{
int m,n;
while(~scanf("%d%d",&n,&m))
{
int a[500100]={0};
int x,y,i,xx,yy,k=0;
for(i=1;i<=n;i++)
a[i]=i;
for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
xx=fun(a,x);
yy=fun(a,y);
if(xx!=yy)//如果两个老大不在一个圈子,则让其中一个老大加入另一个老大的圈子
{
a[xx]=yy;
}
}
for(i=1;i<=n;i++)
if(a[i]==i) k++;//老大的个数就是圈子的个数
printf("%d\n",k);
}
return 0;
}