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

洛谷P1551——亲戚(并查集入门)

题目传送门

1.并查集是什么?

本质是一种树形结构(拥有相同根节点的多叉树),可以很方便的判断集合元素之间的从属关系。

2.如何维护好一个并查集?

并查集的本质在于相同的根节点,那么只需要通过某种方式记录好组内每一个元素的根节点,比较两个元素根节点是否相同就可以判断是否在同一个集合内。

3.如何判断根节点?

我们可以定义根节点的上一个节点为自己,这样子我们便有一个判断的条件了。

开始写代码吧。

头部分

#include<iostream> using namespace std; int fa[5010]; int main{ int a,b,c; cin>>a>>b>>c; int m,n; }

首先我们要初始化所有数的根为自身

for(int i=1;i<=a;i++){ fa[i]=i;//fa是father数组,记录其上一个节点信息 }

其次就是处理输入信息

我们要先读取两个整数,这两个整数是在同一个集合内的。

然后我们就要找他的根。

int find(int x){ while(x!=fa[x]){//循环找根节点(由根节点的定义 x=fa[x]; } return x;//返回找到的根节点 }

然后我们要统一两个数的根,这里我们可以想象一个图

a d

b b b e e e e e e e e e e e e

c c c c c c.

虽然有点丑,但是应该能看到这是一个三层和两层的树,我们要做的实际上是把他的根节点统一,即下图(如果这么丑也能算图的话):

a

b b b d

c c c c c c. e e e e e e e e e e e e

其实就是把一棵树全部(注意是全部)嫁接到另一棵树上。

for(int i=0;i<b;i++){ cin>>m>>n; if(find(m)!=find(n)) fa[find(m)]=find(n);//将一棵树的根节点插入到另一棵树上 }

然后就是判断是否相同了,很简单,直接贴完整代码了

#include<iostream> using namespace std; int fa[5010]; int find(int x){ while(x!=fa[x]){ x=fa[x]; } return x; } int main(){ int a,b,c; cin>>a>>b>>c; int m,n; for(int i=1;i<=a;i++){ fa[i]=i; } for(int i=0;i<b;i++){ cin>>m>>n; if(find(m)!=find(n)) fa[find(m)]=find(n); } for(int i=0;i<c;i++){ cin>>m>>n; if(find(m)==find(n)) printf("Yes\n"); else printf("No\n"); } return 0; }
http://www.cnnetsun.cn/news/47012.html

相关文章:

  • Qwen3-14B技术解析:双模推理架构重塑AI应用效率格局
  • 如何快速解决Refine+Next.js+Ant Design的兼容性问题:从冲突到优化的完整实践指南
  • ElasticJob云原生部署终极指南:分布式任务调度的完整解决方案
  • 终极iOS评论系统:5大核心功能深度解析与实战指南
  • 1811种语言+全合规架构:Apertus-8B如何重新定义开源大模型标准
  • ERNIE 4.5-VL-424B-A47B:百度异构MoE架构重塑多模态大模型效率边界
  • 5分钟掌握路径规划地图:栅格与拓扑算法深度解析
  • 3步终极方案:彻底解决GitHub教程图片加载失败问题
  • 66、操作系统内核关键概念与技术解析
  • 5、ConfigMgr 边界组创建与客户端安装指南
  • 音乐资源获取工具终极指南:免费畅享海量音乐的神器
  • k6性能测试深度解析:8大核心技术策略助力企业系统优化
  • 微软VibeVoice-1.5B深度体验:从技术小白到语音合成达人的真实历程
  • Qwen3-32B智能推理模型:双模式思维架构深度解析
  • 开源贡献如何加速你的技术职业发展
  • AMD显卡运行Ollama大模型:2025年零基础部署终极指南
  • 如何用Rust快速构建跨平台桌面应用:终极指南
  • 1.2B参数改写边缘智能规则:LFM2-Tool模型实现毫秒级工具调用
  • 终极Emby体验指南:用Tsukimi打造完美个人影院 [特殊字符]
  • Awesome Blender:3D建模爱好者的终极资源宝典
  • Path of Building中文版PoeCharm终极指南:从萌新到大佬的完全解析
  • MPEG-DASH Widevine DRM视频解密技术深度解析
  • 15、Ubuntu实用技巧大揭秘
  • 终极中文字体解决方案:SimSun获取与使用全指南
  • 22、Linux 字体与语言设置全攻略
  • 25、Linux图形处理全攻略
  • 26、Linux 图形与音频应用指南
  • 27、探索Ubuntu系统中的音频应用世界
  • Archery数据库导出实战:告别手动拼接,一键搞定Excel和JSON格式
  • 0.8秒修复1080P视频:SeedVR-3B重构行业效率标准,成本直降90%