原题链接:畅通工程
#include "iostream"
#include "cstdio"
#include "cstdlib"
#include "cstring"
#include "cmath"
#include "algorithm"
#include "queue"
#include "vector"
#include "stack"
#include "map"
#include "set"
using namespace std;
typedef long long ll;
const int maxn = 100010;
const int INF = 1e9;
//priority_queue<int, vector<int>, greater<int> > q;
int fa[maxn]; //并查集数组
int n, m;
//初始化并查集数组
void init() {
for(int i = 1; i <= n; ++i) fa[i] = i;
}
//找爹函数
int find(int x) {
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
int main() {
while(true) {
cin >> n;
if(!n) break;
cin >> m;
init();
for(int i = 0; i < m; ++i) {
int x, y;
cin >> x >> y;
int p1 = find(x);
int p2 = find(y);
if(p1 != p2) fa[p2] = p1;
}
int res = 0;
for(int i = 1; i <= n; ++i) if(fa[i] == i) res++;
cout << res - 1 << endl;
}
return 0;
}
9.9 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复