您的位置:首页 > 其它

hdoj 1232 畅通工程 【并查集】

2014-08-02 21:29 253 查看
策略: 如题。

并查集:并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint
Sets)的合并及查询问题。 说白了就是点的合并与查询。


题目链接 点击打开链接

代码:

#include<stdio.h>
#include<string.h>
int fat[1005];
int f(int n){
	if(fat
 != n) fat
 = f(fat
);
	else
	return fat
;
}
int main()
{
	int n, m, i;
	while(scanf("%d", &n), n){
		scanf("%d", &m);
		for(i = 1; i <= n; i ++)
			fat[i] = i;
			int a, b;
		while(m --){
			scanf("%d%d", &a, &b);
			int x = f(a);
			int y = f(b);
			if(x != y){ //如果 a的祖先不等于b的祖先,就让b的祖先的祖先等于a的祖先,这样两个集合就合并成了一个
				fat[y] = x;
			}
		}
		int ans = 0;
		for(i = 1; i <= n; i ++)
			if(fat[i] == i)
			++ans;
		printf("%d\n", ans-1);
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: