html个人网站设计,四秒网站建设,蚌埠推广公司,律师事务所网站建设方案Acwing 837. 连通块中点的数量 题目描述思路讲解代码展示 题目描述 思路讲解 大家看y总这段代码时要注意#xff0c;在C操作时#xff0c;y总先把a#xff0c;b的根结点取出来了#xff1a;a find(a), b find(b);#xff0c;因此接下来是先将集合a接到集合b下再把a的连通… Acwing 837. 连通块中点的数量 题目描述思路讲解代码展示 题目描述 思路讲解 大家看y总这段代码时要注意在C操作时y总先把ab的根结点取出来了a find(a), b find(b);因此接下来是先将集合a接到集合b下再把a的连通块大小加到b上还是先把a的连通块大小加到b上再操作集合都是可以的如果大家没有提前一步的处理就必须要先加连通块大小再操作集合否则操作完集合后a和b的根结点将会重叠导致输出错误
代码展示
#include iostreamusing namespace std;const int N 100010;int n, m;
int p[N], cnt[N]; //cnt用来记录每个集合的大小int find(int x) {if (p[x] ! x) p[x] find(p[x]);return p[x];
}int main() {cin n m;for (int i 1; i n; i) {p[i] i;cnt[i] 1; //刚开始cnt只有一个元素都是1}while (m--) {string op;int a, b;cin op;if (op C) {cin a b;a find(a), b find(b);if (a ! b) {p[a] b;cnt[b] cnt[a];}} else if (op Q1) {cin a b;if (find(a) find(b)) puts(Yes);else puts(No);} else {cin a;cout cnt[find(a)] endl;}}return 0;
}