当前位置: 首页 > 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.zskr.cn/news/1445162.html

相关文章:

  • 告别环境配置烦恼:用VSCode插件一键搞定ESP32开发环境(IDF v5.2.1)
  • 构建支持跨平台统一清洗和向量化 大模型数据清洗中的去重与过滤机制 的高性能多模态数据框架系统
  • 128元线列阵分裂波束仿真工具:20kHz窄带下-15°~0°三角度主轴扫描与方向图生成
  • 告别电机乱抖!深入解析STC无刷电调PCB设计:为什么我的四层板比两层板稳定这么多?
  • ShaderGraph避坑指南:DDX/DDY导数节点与矩阵运算的常见误区与性能优化
  • 2026新疆旅行社哪家靠谱口碑好?优质定制小包团旅行社优选推荐 - 栗子测评
  • 钢琴左手弹什么?从低音谱号到实际演奏的保姆级指南(附常见误区纠正)
  • 从Swagger文档到权限提升:一个真实API漏洞挖掘的完整复盘与避坑指南
  • TranslucentTB框架依赖终极解决方案:快速修复Microsoft.UI.Xaml缺失问题
  • 2026年5月特氟龙高温胶带源头厂家推荐,加热圈/高温布/云母加热圈/特氟龙高温胶带,特氟龙高温胶带供应商怎么选择 - 品牌推荐师
  • 告别TileMap!用Godot4.2手搓一个轻量级2D网格节点(附鼠标交互与高亮源码)
  • 研究聚焦周报:构建个人知识引擎,对抗信息碎片化
  • CPA教学法:攻克小学数学大数分解难题的12周实践指南
  • 2026解析新疆旅行社哪家口碑好?哪家旅行社靠谱:结合口碑综合甄选新疆旅行社排名 - 栗子测评
  • 预训练和微调有啥区别,搞懂大模型进化的关键两步
  • DIY多功能LED测试仪:安全兼容单色与RGB LED的硬件调试利器
  • 基于动捕数据的机器人运动技能学习:从模仿到强化控制
  • Jupyter Notebook里Matplotlib画图总出问题?%matplotlib inline vs notebook 终极选择与避坑指南
  • 实验室数智化转型的真正起点:AI 报告审核如何成为第一道“质量闸门”,IACheck重构审核逻辑
  • TRUSTCHECKPOINTS:嵌入式设备安全验证新方案
  • 你的数据库真的够快吗?用sysbench-1.20做个基准测试入门(附CPU/内存/文件IO测试命令)
  • 艾尔登法环终极帧率解锁指南:简单三步告别60帧限制
  • STM32硬件IIC避坑指南:从EV5到EV8_2,手把手教你调试F407的I2C1(库函数版)
  • 亚洲女学生团队如何在国际黑客马拉松中脱颖而出:技术、协作与人文的融合
  • PyTorch实战:用奇异值分解(SVD)实现对称正交化,比施密特方法快多少?
  • Zeta调度器:基于部分执行优化交互式服务尾部延迟
  • 从分段审核到一体化闭环:AI 报告审核如何用 IACheck 重构仪器校准与期间核查流程
  • Ruby集成GPT-3 API实战指南:从环境配置到生产部署
  • ThingsBoard网关实战:如何把车间里的Modbus老设备轻松‘搬’上云端?
  • 软件安全评审实战指南:从流程设计到团队赋能