HzuWHF


私信TA

用户名:I7I08I9047

访问量:76448

签 名:

我RUN了

等  级
排  名 18
经  验 20463
参赛次数 13
文章发表 127
年  龄 3
在职情况 学生
学  校 贺州学院
专  业

  自我简介:

解题思路:

        并查集。Find 递归跑得比循环慢一点企鹅.jpg


参考代码:

#include<bits/stdc++.h>
using namespace std;

int pre[1003], point;

int find(int ele) {
	return ele == pre[ele] ? ele : pre[ele] = find(pre[ele]);
}

void link(int elest, int elend) {
	int findst = find(elest), findnd = find(elend);
	if (findst != findnd)
		pre[findst] = findnd;
}

void init(int point) {
	for (int i = 0; i < point; i++)
		pre[i] = i;
}

int main() {
	int paths, poi1, poi2;
	while (cin >> point && point && cin >> paths) {
		init(point);
		while (paths--) {
			cin >> poi1 >> poi2;
			link(poi1, poi2);
		}
		int total = 0;
		for (int i = 0; i < point; i++)
			if (pre[i] == i)
				total++;
		cout << total - 1 << endl;
	}
}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区