题解 | #畅通工程#

畅通工程

https://www.nowcoder.com/practice/4878e6c6a24e443aac5211d194cf3913

并查集基础代码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

#define N 1000  //元素的上限个数
int father[N]; //存储了每个元素父亲的下标
int height[N]; // 存储了某个根的高度

void Init(int n) {
	for (int i = 1; i <= n; i++) {
		father[i] = i;
		height[i] = 1;
	}
}

int Findfather(int x) {
	if (x != father[x]) {
		father[x] = Findfather(father[x]);
	}
	return father[x];
}

void Union(int x, int y,int & num) {
	x = Findfather(x);
	y = Findfather(y);
	if (x != y) {
		num--;
		if (height[x] < height[y]) {
			father[x] = y;
		}
		else if (height[x] > height[y])
			father[y] = x;
		else {
			father[y] = x;
			++height[x];
		}

	}
	
}





int main() {
	int n, m;
	while (cin >> n >> m) {
		if (n == 0) break;

		int num = n;
		Init(n);  //初始化并查集
		for (int i = 0; i < m; i++) {
			int a, b;
			cin >> a >> b;
			Union(a, b, num);

		}
		cout << num-1 << endl;

	}
}

全部评论

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务