题解:P3367 【模板】并查集

· · 题解

题解:洛谷 P3367 【模板】并查集

题目描述

传送门

给定 n 个元素(编号为 1 至 n),需要处理 m 次操作:

输入格式

输出格式

算法思路

并查集核心操作

  1. 查询(Find)

    • 递归查找根节点,并进行路径压缩优化
    • 路径压缩:将路径上的所有节点直接指向根节点
  2. 合并(Union)

    • 将两个集合的根节点连接

时间复杂度

代码实现(不要抄啊)

#include<bits/stdc++.h>
int father[220006];
int find(int k){//寻找 
    if(father[k]==k)return k;
    return father[k]=find(father[k]);//边界 
} 
int main(){
    int n,m;
    std::cin>>n>>m;
    for(int i=1;i<=n;i++){
        father[i]=i;
    }
    for(int i=1;i<=m;i++){
        int z,x,y;
        std::cin>>z>>x>>y;
        if(z==1){   // 合并根节点 
            father[find(x)]=find(y);
        }
        else{
            if(find(x)==find(y)){ 
                std::cout<<"Y"<<"\n";
            }
            else{
                std::cout<<"N"<<"\n";
            }
        }
    }
}