其他分享
首页 > 其他分享> > [AcWing 836] 合并集合

[AcWing 836] 合并集合

作者:互联网


点击查看代码
#include<iostream>

using namespace std;
const int N = 1e5 + 10;
int p[N];
int find(int x)
{
    if (p[x] != x)  p[x] = find(p[x]);
    return p[x];
}
int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i ++)   p[i] = i;
    while (m --) {
        char op;
        int a, b;
        cin >> op >> a >> b;
        if (op == 'M')  p[find(a)] = find(b);
        else {
            if (find(a) == find(b))     puts("Yes");
            else    puts("No");
        }
    }
    return 0;
}

  1. p[ x ] 用来存 x 的父结点编号,根结点满足 p[ x ] = x;
  2. find 作用是返回根结点的值,并把路径上所有点的父结点都变为根结点(路径压缩);
  3. 合并集合 a 和 b,将 a 集合根结点变为 b 集合根结点的子结点;

标签:结点,836,puts,int,集合,return,find,AcWing
来源: https://www.cnblogs.com/wKingYu/p/16216813.html