3 条题解

  • 1
    @ 2022-3-11 14:06:55
    
    并查集的板子题
    并查集是一种树形的数据结构,顾名思义,它用于处理一些不交集的合并及查询问题。它支持两种操作:
    查找(Find):确定某个元素处于哪个子集;
    合并(Union):将两个子集合并成一个集合。
    1. 初始化,循环枚举n个点,初始每个点的祖先就是自己,fa[i]=i;
    2. 路径压缩的查找(把在路径上的每个节点都直接连接到根上)
    int find(int x) {
      if (x != fa[x])  // x 不是自身的父亲,即 x 不是该集合的代表
        fa[x] = find(fa[x]);  // 查找 x 的父亲的父亲直到找到代表也就是祖先,于是顺手路径压缩,将fa[x]直接设为该值,此时的树形结构就是一个只有2层的树。
      return fa[x];
    }
    3. 合并
    void unionSet(int x, int y) {
      // x 与 y 所在家族合并
      x = find(x);
      y = find(y);
      fa[x] = y;  // 把 x 的祖先变成 y 的祖先的儿子
    }
    详情可见OI WIKI介绍
    

    并查集介绍

    • 0
      @ 2024-2-20 20:26:32

      并查集(模板)

      /*
      树形数据结构--并查集
      概念:有若干个集合,每个集合均为一棵树
      主要用处:处理一些合并及查询问题速度较快
      处理问题与函数:合并(merge)->将若干个点合并到一个或多个集合里(构成一棵树或森林)或将多个集合合并成一个集合
                     查询(find)->询问该子节点的根(root)
                     其他(other)->求集合数量(number)
      用fa数组存储父节点,难点便迎刃而解
      代码实现:
      查询:
      if (x!=fa[x])find(fa[x]);
      return fa[x];
      合并:
      int tx=find(x);
      int ty=find(y);
      if (tx!=ty)fa[tx]=ty;
      其他:
      if(fa[x]==x)ans++;
      压缩:
      find函数每次查找父节点,下次再查找运行时间变慢,所以每次求出父节点便存起来
      if (x!=fa[x])fa[x]=find(fa[x]);
      return fa[x];
      */
      #include <bits/stdc++.h>
      using namespace std;
      int n,m,q,fa[5010];
      int find(int x){
      	if (x!=fa[x])fa[x]=find(fa[x]);
      	return fa[x];
      }
      void merge(int x,int y){
      	int tx=find(x);
      	int ty=find(y);
      	if (tx!=ty)fa[tx]=ty;
      }
      int main(){
      	cin>>n>>m>>q;
      	for (int i=1;i<=n;i++)fa[i]=i;
      	int x,y;
      	for (int i=1;i<=m;i++){
      		cin>>x>>y;
      		merge(x,y);
      	}
      	for (int i=1;i<=q;i++){
      		cin>>x>>y;
      		if (find(x)==find(y))cout<<"Yes\n";
      		else cout<<"No\n";
      	}
      	return 0;
      }
      
      • -3
        @ 2022-4-19 22:46:35

        严禁抄题解,发现后取消成绩

        • 1

        信息

        ID
        917
        时间
        1000ms
        内存
        128MiB
        难度
        3
        标签
        递交数
        32
        已通过
        20
        上传者