首页 > 其他分享 >并查集

并查集

时间:2023-08-27 23:34:44浏览次数:28  
标签:int 查集 find 编号 集合 节点

  1. 将两个集合合并
  2. 询问两个元素是否在一个集合当中

基本原理:每个集合用一棵树表示,树根的编号就是整个集合的编号。每个节点储存它的父节点,p[x]表示x的父节点

判断树根(属于那个集合)if (p[x] == x)
求x的集合编号:while(p[x] != x) x = p[x];
合并两个集合:px是x的集合编号,py是y的集合编号。p[x] = y,(直接将一棵树插到另一颗树下面)

模板:

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 1e5 + 10;

int n,m;
int p[N];

// 返回x的祖宗节点 + 路径优化
int find(int x) {
    if (p[x] != x) p[x] = find(p[x]); // 路径优化,用while会TLE
    return p[x];
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++) p[i] = i; // 初始化树根p[x] = x

    while (m--) {
        char op[2];
        int a, b;
        cin >> op >> a >> b;
        if (op[0] == 'M') p[find(a)] = find(b);
        else {
            if (find(a) == find(b)) cout << "Yes" << endl;
            else cout << "No" << endl;
        }
    }
    return 0;
}

标签:int,查集,find,编号,集合,节点
From: https://www.cnblogs.com/-37-/p/17661112.html

相关文章

  • 并查集
    2023.8.26很晚了,还来得及吗 2023-08-2621:18:03P2661[NOIP2015提高组]信息传递-洛谷|计算机科学教育新生态(luogu.com.cn)还未完成 2023-08-2708:21:06已完成  初步总结:主要分为三个模块:合并,查找,移动(还不会)注意:合并时,是把根节点合并,而非自身优化:r......
  • hdu:畅通工程(并查集)
    ProblemDescription某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?Input测试输入包含若干......
  • 并查集学习笔记
    并查集的定义并查集是一种树型的数据结构,用于处理一些不相交集合(disjointsets)的合并及查询问题。常常在使用中以森林来表示。——百度百科并查集,顾名思义,支持以下两种操作操作:并(Union):把两个不相交的集合合并为一个集合。查(Find):查询两个元素是否在同一个集合中。并......
  • 并查集:一种巧妙的数据结构
    并查集:一种巧妙的数据结构一、并查集简介并查集(Union-Find)是一种非常经典的数据结构,它主要用于处理一些不相交集合的合并及查询问题。并查集的主要操作有两个:查找和合并。查找操作用于判断一个元素属于哪个集合,合并操作用于将两个不相交的集合合并为一个集合。二、基本原理并......
  • 并查集
    一:并查集的基本操作:1.初始化:  让每个节点的父节点指向本身 voidinit(){ for(inti=0;i<N;i++)fa[i]=i;}2.查询:用递归的方法查询此节点的根节点,一层一层访问父节点,直至根节点(根节点的标志就是父节点是本身)。要判断两个元素是否属于同一个集合,只需要看它们的......
  • 为什么会变成这样呢? #3(并查集维护区间)
    给定长度为\(n\)的字符串\(S\)以及\(m\)个区间\([l_i,r_i]\),记\(T=S[l_1,r_1]+\cdots+S[l_m,r_m]\),其中\(S[x,y]\)表示从第\(x\)个字符到第\(y\)个字符的子串。求如何重新排列\(S\)中字符的顺序使得\(T\)的字典序尽可能大。期望复杂度:近似\(O(n)\)。czy's......
  • 学不会的并查集
    前言又被薄纱了捏,发现没有队友啥都做不了捏,发现自己并查集忘光光捏,惨捏,感觉自己好没有用捏,捏,捏……牢骚结束,努力捏( ̄▽ ̄)*......
  • 并查集专题
    并查集专题\(AcWing\)\(836\).合并集合【最简并查集,路径压缩概念】\(AcWing\)\(837\).连通块中点的数量【并查集+附加家族成员数量】\(AcWing\)\(240\).食物链【扩展域并查集,带权并查集】\(AcWing\)\(1250\).格子游戏【普通并查集】\(AcWing\)\(1252\).搭配......
  • 并查集
    亲戚问题图论模型:每个人看作一个结点,亲戚关系看作无向边。查询时,只关心是否连通,不关心内部具体的层级关系。所以可以将各个层级直接压缩。每插入一个元素就直接向根节点合并(路径压缩)。例题:P1551|AC记录常见应用维护传递性问题例题:P3958|AC记录扩展域形式(更为......
  • 并查集处理区间跳跃
    在网上胡乱找的一些关于并查集处理区间跳跃(也有叫区间覆盖/序列联通性,这类问题有没有什么统一叫法存疑?)的题目,或许能学习后成为一种套路参考:区间跳跃问题KnightTournament板子题维护一个并查集\(nxt\),\(nxt[i]\)为从\(i\)开始(包含\(i\))的第一个没有被打败的骑士的编号并查集......