news 2026/6/10 0:02:53

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 21:06:37

OpCore-Simplify终极指南:5分钟搞定Hackintosh配置

OpCore-Simplify终极指南&#xff1a;5分钟搞定Hackintosh配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 想要在普通PC上体验macOS的魅力&#x…

作者头像 李华
网站建设 2026/6/9 21:04:49

SeedVR-7B重构视频修复标准:从技术突破到产业落地

SeedVR-7B重构视频修复标准&#xff1a;从技术突破到产业落地 【免费下载链接】SeedVR-7B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/SeedVR-7B 导语 字节跳动开源的SeedVR-7B模型通过扩散Transformer架构实现任意分辨率视频修复&#xff0c;将108…

作者头像 李华
网站建设 2026/6/8 20:13:10

40、UNIX网络编程中的TLI与杂项例程

UNIX网络编程中的TLI与杂项例程 1. TLI网络编程 TLI(Transport Layer Interface)是UNIX网络中替代套接字接口的一种选择。它具有协议无关性,这一点优于套接字接口,但在实际应用中,使用TLI的人并不多。如果追求可移植性,建议优先选择套接字接口。 1.1 异步事件处理函数…

作者头像 李华
网站建设 2026/6/6 11:23:58

47、《/proc文件系统与伪终端技术解析》

《/proc文件系统与伪终端技术解析》 1. /proc文件系统概述 在操作系统中,获取进程信息是一项常见的需求。传统方法是读取内核内存和交换区,但这种方式存在诸多不便。而 /proc 文件系统则是一种更优的解决方案,它不仅实现起来更简单,而且在支持 /proc 的不同操作系统版…

作者头像 李华
网站建设 2026/6/8 21:53:11

AutoGPT财务报表分析自动化解决方案

AutoGPT财务报表分析自动化解决方案 在企业财务分析的世界里&#xff0c;一份年报的深度解读往往需要数小时甚至数天&#xff1a;从官网翻找PDF、手动提取数据、核对单位、计算指标&#xff0c;到撰写趋势分析和风险提示——整个过程繁琐且极易出错。而当分析师需要横向对比十几…

作者头像 李华
网站建设 2026/6/9 17:09:56

腾讯开源Hunyuan-7B-Instruct-AWQ-Int4:轻量化大模型部署新时代

腾讯开源Hunyuan-7B-Instruct-AWQ-Int4&#xff1a;轻量化大模型部署新时代 【免费下载链接】Hunyuan-7B-Instruct-AWQ-Int4 腾讯开源Hunyuan-7B-Instruct-AWQ-Int4大语言模型&#xff0c;支持快慢思维推理&#xff0c;原生256K超长上下文&#xff0c;优化Agent任务性能。采用G…

作者头像 李华