输入一些整数,给出若干个一对的信息,将其分为几组,返回组的数量
思路
- 先写初始化函数,每个结点的爸爸都是自己
- 写合并函数,如果结点的根不同就合并
- 写归一化根结点函数,将同一个组的结点父亲全部统一
- 用isRoot数组计算组数
- 最后直接加bool变量就行
代码
#include<algorithm>#include<vector>#include<iostream>using namespace std;const int maxn = 110;int m, n;int father[maxn];int isRoot[maxn];int find_father(int i){if(father[i] == i) return i;else{int f = find_father(father[i]);father[i] = f;return f;}}void Union(int a, int b){int faA = find_father(a);int faB = find_father(b);if(faA!=faB) father[faA] = faB;}int main(){scanf("%d%d", &n, &m);int node1, node2;for(int i = 1; i <= n; i++) {father[i] = i;// 一开始自己都是自己的爸爸isRoot[i] = false;}for(int i = 0; i < m; i++){scanf("%d%d", &node1, &node2);Union(node1, node2);}//初始化根结点for(int i = 1; i <= n; i++){isRoot[find_father(i)] = true;}int count = 0;for(int i = 1; i <= n; i++){count += isRoot[i];}printf("%d",count);return 0;}
