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

利用“并查集”快速判断当前边是否会构成环 → Kruskal算法

【算法分析】
Kruskal 算法的贪心思想体现在“始终优先选权值最小且不构成环的边”。
并查集在 Kruskal 算法中,核心作用就是快速判断当前边是否会构成环

【算法代码一:基础版
特别注意:利用并查集处理问题时,千万不要忘了初始化操作 pre[i]=i。

#include <bits/stdc++.h>
using namespace std;const int N=1e3+5;
int pre[N];int find(int x) {if(x!=pre[x]) pre[x]=find(pre[x]);return pre[x];
}void merge(int x,int y) {int a=find(x);int b=find(y);if(a!=b) pre[a]=b;
}int main() {int n,m;cin>>n>>m;for(int i=1; i<=n; i++) pre[i]=i;bool flag=false;while(m--) {int u,v;cin>>u>>v;int fu=find(u);int fv=find(v);if(fu==fv) flag=true;else merge(u,v);}if(flag) cout<<"has circle"<<endl;else cout<<"no circle"<<endl;return 0;
}/*
in:
3 3
1 2
2 3
1 3out:
has circle
-----------
in:
4 3
1 2
2 3
3 4out:
no circle
*/

【算法代码二:优化版(按秩合并 + 路径压缩,大数据更稳)】

#include <bits/stdc++.h>
using namespace std;const int N=1e3+5;
int pre[N],rnk[N];int find(int x) {if(x!=pre[x]) pre[x]=find(pre[x]);return pre[x];
}void merge(int x,int y) { //合并两个子集int a=find(x);int b=find(y);if(rnk[a]<=rnk[b]) pre[a]=b;else pre[b]=a;if(rnk[a]==rnk[b] && a!=b) rnk[b]++;
}//如果深度相同且根结点不同,则新的根结点的深度+1int main() {int n,m;cin>>n>>m;for(int i=1; i<=n; i++) {pre[i]=i;rnk[i]=1;}bool flag=false;while(m--) {int u,v;cin>>u>>v;int fu=find(u);int fv=find(v);if(fu==fv) flag=true;else merge(u,v);}if(flag) cout<<"has circle"<<endl;else cout<<"no circle"<<endl;return 0;
}/*
in:
3 3
1 2
2 3
1 3out:
has circle
-----------
in:
4 3
1 2
2 3
3 4out:
no circle
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/146948171
https://blog.csdn.net/hnjzsyjyj/article/details/127524348



 

http://www.jsqmd.com/news/933824/

相关文章:

  • DataUp:轻量级开源工具,破解科研数据长尾困境
  • 告别环境配置烦恼:用VSCode插件一键搞定ESP32开发环境(IDF v5.2.1)
  • 128元线列阵分裂波束仿真工具:20kHz窄带下-15°~0°三角度主轴扫描与方向图生成
  • 构建支持跨平台统一清洗和向量化 大模型数据清洗中的去重与过滤机制 的高性能多模态数据框架系统
  • 告别电机乱抖!深入解析STC无刷电调PCB设计:为什么我的四层板比两层板稳定这么多?
  • 素数域中最小连续本原根对的存在性证明与高效搜索算法
  • ShaderGraph避坑指南:DDX/DDY导数节点与矩阵运算的常见误区与性能优化
  • 从Alto到云计算:查克·萨克的系统设计哲学与工程实践启示
  • 传感器介绍
  • 【LeetCode刷题日记】一篇搞懂回溯算法模板,附77.组合详解
  • 新手入门CTF MISC:从MoeCTF 2022真题手把手教你用010 Editor和zsteg
  • 2026新疆旅行社哪家靠谱口碑好?优质定制小包团旅行社优选推荐 - 栗子测评
  • 2026推荐新疆靠谱纯玩无购物旅行社:盘点新疆正规口碑好的优质旅行社 - 栗子测评
  • 从旋钮到菜单:EC11编码器在OLED屏幕交互中的实战应用(避坑指南)
  • .NET Gadgeteer:模块化硬件与C#托管代码的嵌入式快速原型开发平台
  • 钢琴左手弹什么?从低音谱号到实际演奏的保姆级指南(附常见误区纠正)
  • 2026年川西旅拍工作室推荐指南,综合口碑与服务分析,成都大咖视觉告诉你川西旅拍哪家好 - 栗子测评
  • TranslucentTB框架依赖终极解决方案:快速修复Microsoft.UI.Xaml缺失问题
  • SAP ABAP Web Service实战:从SE80到SOAMANAGER,手把手教你打通内外系统接口
  • 从Swagger文档到权限提升:一个真实API漏洞挖掘的完整复盘与避坑指南
  • 如何发起微信投票活动,小程序发起投票全步骤 - 投票小程序
  • 抖音内容批量下载全攻略:高效自动化工具助你轻松保存精彩瞬间
  • 告别TileMap!用Godot4.2手搓一个轻量级2D网格节点(附鼠标交互与高亮源码)
  • 2026年5月特氟龙高温胶带源头厂家推荐,加热圈/高温布/云母加热圈/特氟龙高温胶带,特氟龙高温胶带供应商怎么选择 - 品牌推荐师
  • 鸿蒙ArkTS实战:5分钟搞定阿里云通义千问API对接(附完整代码)
  • 51单片机红外遥控风扇仿真套件:Keil5源码+Proteus8.9双机收发演示+PWM调速与定时功能
  • 技术团队如何量化与激励基础设施与工程效能等恒星工作
  • 研究聚焦周报:构建个人知识引擎,对抗信息碎片化
  • 小数据集文档分类实战:7种方法解决数据稀缺难题
  • CPA教学法:攻克小学数学大数分解难题的12周实践指南