2.数据结构:3.合并集合

原题链接

cpp 复制代码
#include<algorithm>
#include<cstring>
#include<iostream>

using namespace std;

const int N=100010;

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[2];
        int a,b;
        cin>>op>>a>>b;
        
        if(op[0]=='M'){
            if(find(p[a])!=find(p[b])){
                p[find(a)]=find(b);
            }
        }else{
            if(find(a)==find(b)){
                puts("Yes");
            }else{
                puts("No");
            }
        }
    }
    
    return 0;
}

维护每个点的根节点,合并是修改根节点,查询也是比较根节点。

相关推荐
淡海水6 小时前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Logic1016 小时前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
2401_839080549 小时前
C++常见八股
数据结构·c++·算法
暮雨封夕10 小时前
跳表(Skip List)详解:原理、实现、使用场景与实际应用
数据结构
miller-tsunami10 小时前
排序的相关知识点
数据结构·排序算法
Logic10114 小时前
C语言/数据结构滑动窗口题解:替换k个字符后的最长连续相同字符子串(LeetCode 424)
c语言·数据结构·字符串·滑动窗口·时间复杂度·频率统计·算法题
程序员阿鹏15 小时前
简单介绍一下软引用
java·开发语言·jvm·数据结构·后端
爱奥尼欧17 小时前
【C++】map、set 的底层是什么?红黑树五条性质、插入旋转到模拟实现
开发语言·数据结构·c++
动词ing17 小时前
【题目练习】动态规划+背包问题
数据结构·目标检测
杜 硕17 小时前
单链表经典算法题
数据结构·算法