首页 > 其他分享 >不带权并查集——jly

不带权并查集——jly

时间:2023-12-03 21:12:56浏览次数:31  
标签:不带权 return dsu int siz 查集 jly DSU find

struct DSU {
  vector<int> f, siz;
    
    DSU() {}
    DSU(int n) {
        init(n);
    }
    
    void init(int n) {
        f.resize(n);
        std::iota(f.begin(), f.end(), 0);
        siz.assign(n, 1);
    }
    
    int find(int x) {
        while (x != f[x]) {
            x = f[x] = f[f[x]];
        }
        return x;
    }
    bool same(int x, int y) {
        return find(x) == find(y);
    }
    
    bool merge(int x, int y) {
        x = find(x);
        y = find(y);
        if (x == y) {
            return false;
        }
        siz[x] += siz[y];
        f[y] = x;
        return true;
    }
    
    int size(int x) {
        return siz[find(x)];
    }
};

使用示例:

DSU dsu(n+1);DSU fn(n+1);
int r1=dsu.find(u),r2=dsu.find(v);
fn.merge(u,v);

标签:不带权,return,dsu,int,siz,查集,jly,DSU,find
From: https://www.cnblogs.com/mathiter/p/17873772.html

相关文章

  • 第 132 场周赛——质数小结论,并查集配Floyd
    https://www.acwing.com/activity/content/competition/problem_list/3648/B题收获:1.利用题目告诉的结论:1e9范围质数之差小于3002.一个数不被2-a的任何数整除等价于他的最小质因子需要大于ac题:初步宏观思路:不难想到用并查集维护类别,只需将每一个类缩成一个点,由于最多只有500......
  • 并查集汇总
    并查集简介并查集是一种可以动态维护若干个不重叠的结合,并支持合并与查询的数据结构并查集是一种树状的数据结构,可以用于维护传递关系以及联通性。并查集有两种操作:find:查询一个元素属于哪个集合merge:合并两个集合模板find函数intfind(intx){ if(x==fa[x]) ret......
  • 【模板】并查集 (洛谷P3367)
    1#include<bits/stdc++.h>2usingnamespacestd;3template<classT>4inlinevoidread(T&s)5{6s=0;7intw=1;8charch=getchar();9while(ch<'0'||ch>'9')10{11......
  • 带权并查集
    很新奇啊这个东西。用来解决形如\(x_i-x_j=y\)系列方程组有无解的问题。思路很简单,\(dis_i\)代表从\(i\)的祖先与\(i\)之间的差值。这样能秒算出方程组中任意两个点的差值。本质是每次把两个方程组合并。找祖先部分:intfindpa(intx){ if(fa[x]!=x){ int......
  • 并查集学习笔记
    简介这里引用OI-wiki上的内容:并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素。顾名思义,并查集支持两种操作:合并(Union):合并两个元素所属集合(合并对应的树)查询(Find):查询某个元素所属集合(查询对应的树的根节点),......
  • 并查集
    多少张桌子时间限制:2000/1000MS(Java/其他)内存限制:65536/32768K(Java/其他)问题描述今天是伊格内修斯的生日。他邀请了很多朋友。现在是晚餐时间。伊格内修斯想知道他至少需要多少张桌子。你必须注意,并不是所有的朋友都认识对方,所有的朋友都不想和陌生人呆在一起。这个问题的......
  • 并查集拓展——种类并查集&带权并查集
    在所面临的问题中,我们不仅需要知道两个元素之间是否存在关系,还需要记录其他要素,于是我们需要对原来的并查集进行拓展。种类并查集对于一般的并查集,只能表示“朋友的朋友就是朋友这种关系”,即我们只关系元素之间的连通性问题。但是对于“敌人的敌人就是朋友”这种关系则无能为力......
  • 并查集
    1.并查集模板  P3367【模板】并查集-洛谷|计算机科学教育新生态(luogu.com.cn)1#include<bits/stdc++.h>2usingnamespacestd;34constintN=2e5+10;5intn,m,x,y,z;6intp[N];//p[x]是x点的祖先78intfind(intx)//并查集9{1......
  • 12-并查集
    12.并查集12.1并查集1.题目并查集提供两个功能:1.看两个元素是否是同一个集合1.将两个元素所在集合的全体合1.均摊下来(比如一百万的数据,有一亿查询)是O(1)2.思路​ 判断集合:每个节点中加入一个指针,初始都指向自己。这个指针一直往上找,找到最上面的就是一个集合的......
  • 并查集(Union Find Set)
    1基本介绍并查集是一种用来判断两个元素之间是否有关系的集合。它的基本思想为:对于两个元素,如果他们之间有关系,则将其连接,以此形成一颗树。对于任意两个节点,如果它们有相同的根节点,则它们之间有关系。2.建立步骤给定n个点,以及m个关系。1.初始状态将每个节点的根节点都指......