logo AlgoBeat OnlineJudge
登录 注册

【模板】并查集 题解

作者: charly666 作弊者  ·  发布于 2026-06-20 20:15:34  ·  最后修改于 2026-06-20 20:29:38
已通过
审核员:Lemon_zqp 弱弱 · 2026-06-20 20:29:38

一、啥是并查集

并查集主要用来解决集合的合并与查询问题。

把“并查集”三个字拆开看:

  • :合并,把两个集合合并成一个。
  • :查询,查两个元素是否在同一个集合里。
  • :集合,一开始每个元素自己是一个集合。

far[i] 表示元素 i 的祖宗。如果 far[i]==i,说明 i 就是根节点。

判断连通性等问题中可以使用并查集来解决。

二、参考代码

#include<bits/stdc++.h>
using namespace std;
int n,m,p,far[200005];
int find(int x){
    if(x==far[x])return x;
    return far[x]=find(far[x]);//路径压缩
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)far[i]=i;//初始化
    while(m--){
        int z,x,y;
        cin>>z>>x>>y;
        if(z==1){//合并
            x=find(x),y=find(y);
            far[x]=y;
        }else{//查询
            if(find(x)==find(y))cout<<"Y\n";
            else cout<<"N\n";
        }
    }
    return 0;
}

三、推荐题目

修复公路村村通亲戚【模板】最小生成树【模板】线性筛素数……

暂无评论

登录 后即可评论。