题解 | #第一题#

第一题

https://www.nowcoder.com/practice/7c29cdfa28274c86afc9e88c07448a10

并查集的简单板子 属实没想到要申请1百万个
#include<iostream>
using namespace std;
#define N 1000010

int father[N];
bool visit[N];

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

void Union(int x, int y,int & num) {
	x = Find(x);
	y = Find(y);
	if (x != y) {
		num++;
		father[y] = x;  //直接相连
	}

}


int main() {
	int n, m;
	for (int i = 0; i < N; i++) {  //并查集初始化
		father[i] = i;
		visit[i] = false;
	}
	int num = 0;  //记录已经连接节点的个数

	while (cin >> n >> m) {
		visit[n] = true;
		visit[m] = true;
		Union(n, m, num);

	}
	int count = 0;
	for (int i = 0; i < N; i++) {
		if (visit[i] == true) {
			count++;
		}
	}
	cout << count - num << endl;
}

全部评论

相关推荐

祈求顺利毕业😁:简历很好了,多投吧牛油😂。主要是环境不好,大家也卷
点赞 评论 收藏
转发
头像
不愿透露姓名的神秘牛友
04-08 20:03
已编辑
点赞 评论 收藏
转发
头像
不愿透露姓名的神秘牛友
04-08 00:50
点赞 评论 收藏
转发
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务