朋友圈

朋友圈

描述

有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;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值