啊哈算法-擒贼先擒王(并查集)

擒贼先擒王

描述:

找团伙的个数,如果1和2是团伙,2和3是团伙,那么1和3也是团伙。

输入:

第一行n m,n表示强盗的人数,m表示m条线索,接下来m行每行两个数a b,表示a和b是同伙。

输出:

不同团伙的个数。

样例输入:

10 9
1 2
3 4
5 2
4 6
2 6
8 7
9 7
1 6

2 4

样例输出:

3

程序代码:

#include<stdio.h>
int f[1010];
int getf(int t);//找BOSS 
int main()
{
	int m,n,sum;
	int i,a,b,boos1,boos2;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		sum=0;
		for(i=1;i<=n;i++)
			f[i]=i;
		for(i=1;i<=m;i++)
		{
			scanf("%d%d",&a,&b);
			boos1=getf(a);
			boos2=getf(b);
			if(boos1!=boos2)
				f[boos2]=boos1;//靠左原则 
		}
		for(i=1;i<=n;i++)
			if(f[i]==i)
				sum++;
		printf("%d\n",sum); 
	}
	return 0;
}
int getf(int t)
{
	if(f[t]==t)
		return t;
	f[t]=getf(f[t]);
	return f[t];
}


猜你喜欢

转载自blog.csdn.net/hezhiying_/article/details/80627392
今日推荐