当前位置: 首页 > news >正文

并查集专题

参考:分享丨【算法题单】常用数据结构(前缀和/栈/队列/堆/字典树/并查集/树状数组/线段树)- 讨论 - 力扣(LeetCode)

板子:

class UnionFind {vector<int> fa; // 代表元vector<int> sz; // 集合大小public:int cc; // 连通块个数UnionFind(int n) : fa(n), sz(n, 1), cc(n) {// 一开始有 n 个集合 {0}, {1}, ..., {n-1}// 集合 i 的代表元是自己,大小为 1ranges::iota(fa, 0); // iota(fa.begin(), fa.end(), 0);}// 返回 x 所在集合的代表元// 同时做路径压缩,也就是把 x 所在集合中的所有元素的 fa 都改成代表元int find(int x) {// 如果 fa[x] == x,则表示 x 是代表元if (fa[x] != x) fa[x] = find(fa[x]); // fa 改成代表元return fa[x];}// 判断 x 和 y 是否在同一个集合bool is_same(int x, int y) {// 如果 x 的代表元和 y 的代表元相同,那么 x 和 y 就在同一个集合// 这就是代表元的作用:用来快速判断两个元素是否在同一个集合return find(x) == find(y);}// 把 from 所在集合合并到 to 所在集合中// 返回是否合并成功bool merge(int from, int to) {int x = find(from), y = find(to);if (x == y) { // from 和 to 在同一个集合,不做合并return false;}fa[x] = y; // 合并集合。修改后就可以认为 from 和 to 在同一个集合了sz[y] += sz[x]; // 更新集合大小(注意集合大小保存在代表元上)// 无需更新 sz[x],因为我们不用 sz[x] 而是用 sz[find(x)] 获取集合大小,但 find(x) == y,我们不会再访问 sz[x]cc--; // 成功合并,连通块个数减一return true;}// 返回 x 所在集合的大小int get_size(int x) {return sz[find(x)]; // 集合大小保存在代表元上}
};

一、基础

二、进阶

Leetcode 1061. 按字典序排列最小的等效字符串

思路:dfs或者并查集

Code:

class Solution {
public:string smallestEquivalentString(string s1, string s2, string baseStr) {int fa[26];// 初始化for (int i = 0; i < 26; i ++)   fa[i] = i;// func:查询x的父节点auto find = [&] (this auto&& find, int x) -> int {if (fa[x] != x) fa[x] = find(fa[x]);return fa[x];  };// func:把大的指向小的auto merge = [&](int x, int y) {auto [small, big] = minmax(find(x), find(y));fa[big] = small;};for (int i = 0; i < s1.size(); i ++)    merge(s1[i] - 'a', s2[i] - 'a');for (int i = 0; i < baseStr.size(); i ++)baseStr[i] = find(baseStr[i] - 'a') + 'a';return baseStr;};
};

 

三、GCD 并查集

四、数组上的并查集

五、区间并查集

六、边权并查集

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/234742.html

相关文章:

  • Python|GIF 解析与构建(5):手搓截屏和帧率控制
  • 思尔芯携手Andes晶心科技,加速先进RISC-V 芯片开发
  • 华为仓颉语言初识:并发编程之同步机制(上)
  • 当丰收季遇上超导磁测量:粮食产业的科技新征程
  • Redis 主从 + 哨兵集群部署
  • 智慧水务发展迅猛:从物联网架构到AIoT系统的跨越式升级
  • Redis配合唯一序列号实现接口幂等性方案
  • App/uni-app 离线本地存储方案有哪些?最推荐的是哪种方案?
  • uniapp 安卓 APP 后台持续运行(保活)的尝试办法
  • H_Prj06 8088单板机的串口
  • TDengine 开发指南——无模式写入
  • matlab不同版本对编译器的要求(sfunction 死机)
  • 储能方案设计:鹧鸪云模拟软件优势尽显
  • HTTP 请求协议简单介绍
  • 豆包和deepseek 元宝 百度ai区别是什么
  • VR视频制作有哪些流程?
  • 【JVM】Java虚拟机(一)——内存结构
  • Android 之 kotlin 语言学习笔记四(Android KTX)
  • 数据集-目标检测系列- 口红嘴唇 数据集 lips >> DataBall
  • Shell 编程核心基础:输入输出与运算详解
  • dexcap升级版之DexWild——面向户外环境的灵巧手交互策略:人类和机器人演示协同训练(人类直接带上动捕手套采集数据)
  • [Spring]-AOP
  • Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
  • 《基于Apache Flink的流处理》笔记
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题———————————————— 版权声明:本文为博
  • 【idea】分享一个关于Maven依赖管理好用的插件
  • x32dbg SwissArmyKnife 插件导入map文件不生效
  • IDEA 中 Undo Commit,Revert Commit,Drop Commit区别
  • IDEA安装迁移IDEA配置数据位置
  • pyarmor加密python程序