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

并查集的模拟实现

简化版本


class UnionFindSet
{
public:UnionFindSet(size_t n):_ufs(n, -1){}void Union(int x1, int x2){int root1 = FindRoot(x1);int root2 = FindRoot(x2);// 如果本身就在一个集合就没必要合并了if (root1 == root2)return;// 控制数据量小的往大的集合合并if (abs(_ufs[root1]) < abs(_ufs[root2]))swap(root1, root2);_ufs[root1] += _ufs[root2];_ufs[root2] = root1;}int FindRoot(int x){int root = x;while (_ufs[root] >= 0){root = _ufs[root];}// 路径压缩while (_ufs[x] >= 0){int parent = _ufs[x];_ufs[x] = root;x = parent;}return root;}bool InSet(int x1, int x2){return FindRoot(x1) == FindRoot(x2);}size_t SetSize(){size_t size = 0;for (size_t i = 0; i < _ufs.size(); ++i){if (_ufs[i] < 0){++size;}}return size;}private:vector<int> _ufs;
};

http://www.lryc.cn/news/455181.html

相关文章:

  • 如何高效删除 MySQL 日志表中的历史数据?实战指南
  • 请散户股民看过来,密切关注两件大事
  • 设计模式之外观模式(Facade)
  • 解锁 Python 嵌套字典的奥秘:高效操作与实战应用指南
  • 联想服务器配置阵列、安装操作系统
  • 【深度强化学习】DDPG实现的4个细节(OUNoise等)
  • 算法工程师重生之第二十二天(递增子序列 全排列 全排列 II 重新安排行程 N皇后 解数独 总结 )
  • css的选择器及优先级
  • JavaScript中的数组不改变原数组的方法
  • Go语言实现长连接并发框架 - 路由分组
  • 跨 VLAN 通信
  • 11.4 Linux_线程_条件变量
  • 通信工程学习:什么是IP网际协议
  • github 国内文件加速下载
  • 算法6:模拟运算
  • 【网络协议大花园】应用层 http协议的使用小技巧,用好了都不用加班,效率翻两倍(上篇)
  • 今日指数day8实战补充(上)
  • Python 之进阶语法:with...as...
  • 嵌入式硬件设计知识详解
  • 计算机网络:物理层 —— 信道及其极限容量
  • 面向对象特性中 继承详解
  • C++ | Leetcode C++题解之第455题分发饼干
  • java版基于Spring Boot + Mybatis在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招投标采购系统源码
  • Anaconda的安装与环境设置
  • 使用FastAPI做人工智能后端服务器时,接口内的操作不是异步操作的解决方案
  • Leetcode 3312. Sorted GCD Pair Queries
  • 用 Delphi 做了一个简单的 CMS
  • ASK, PSK, FSK, DPSK
  • 【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示
  • [Offsec Lab] ICMP Monitorr-RCE+hping3权限提升