浙大数据结构:05-树8 File Transfer

数据结构MOOC

PTA习题

这道题考察并查集的操作,合并以及找根结点
机翻:

1、条件准备

node是数组存放1-N结点的根节点的,n为总结点数
#include <iostream>
using namespace std;const int N = 1e4 + 5;
int node[N];
int n;
先初始化,每一个结点的根节点是本身。
然后循环输入每一组数据,遇到S就退出。
遇到I就将两个结点插入到一棵树中,用insert函数实现
遇到C就检查两个结点是否在同一棵树中,用check实现o
最后跳出循环,看看一共有几棵树,并输出对应语句,用component函数实现

int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n;for (int i = 1; i <= n; i++)node[i] = i;while (1){char c;cin >> c;if (c == 'S')break;int a, b;cin >> a >> b;if (c == 'I')insert(a, b);else if (c == 'C')check(a, b);}component();return 0;
}

2、find函数

该函数是找结点所在树的根节点。如果下标与值相等,则它自己就是根节点。
否则沿着路径找其对应根节点,并更新该结点的祖宗结点为返回的根节点
这个操作保证每次find查找完,所遍历的结点它们的每个结点的祖宗结点都更新了
int find(int a)
{if (node[a] == a)return a;elsereturn node[a] = find(node[a]);//路径压缩
}

 3、insert函数

将两个结点所在树合并,先找到它们对应的祖宗结点。
这里采用值大的作为新的根节点,并把另一个祖宗结点的值改为新的根节点。
void insert(int a, int b)
{int parenta = find(a), parentb = find(b);if (parenta > parentb)node[parentb] = parenta;elsenode[parenta] = parentb;
}

4、check函数

看看两个结点祖宗结点是否一样,输出对应数据
void check(int a, int b)
{if (find(a) == find(b))cout << "yes" << endl;elsecout << "no" << endl;
}

 5、component函数

找一共有多少棵树,只需遍历一遍每个结点,若值为其下标,则它就为这棵树的根节点。
如果只有一棵树,那么所有结点都连起来了,否则输出有多少棵树
void component()
{int num = 0;for (int i = 1; i <= n; i++)if (i == node[i])num++;if (num == 1)cout << "The network is connected.";elsecout << "There are " << num << " components.";
}

6、总结

这道题运用了并查集的知识,难度不算大,没有用到结构体、指针,较好理解。
完整代码如下:
#include <iostream>
using namespace std;const int N = 1e4 + 5;
int node[N];
int n;int find(int a)
{if (node[a] == a)return a;elsereturn node[a] = find(node[a]);
}void insert(int a, int b)
{int parenta = find(a), parentb = find(b);if (parenta > parentb)node[parentb] = parenta;elsenode[parenta] = parentb;
}void check(int a, int b)
{if (find(a) == find(b))cout << "yes" << endl;elsecout << "no" << endl;
}void component()
{int num = 0;for (int i = 1; i <= n; i++)if (i == node[i])num++;if (num == 1)cout << "The network is connected.";elsecout << "There are " << num << " components.";
}int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n;for (int i = 1; i <= n; i++)node[i] = i;while (1){char c;cin >> c;if (c == 'S')break;int a, b;cin >> a >> b;if (c == 'I')insert(a, b);else if (c == 'C')check(a, b);}component();return 0;
}
 

附录:并查集相关操作

#define MAXN 1000
typedef int ElementType;
typedef int SetName;
typedef ElementType SetType[MAXN];void Union(SetType S,SetName root1,SetName root2)
{if(S[root2]<S[root1]){S[root2]+=S[root1];S[root1]=root2;  }else {S[root1]+=S[root2];S[root1]=root2;}
}
SetName find(SetType S,ElementType x)
{if(S[x]<0)return x;else return S[x]=find(S,S[x]);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147514.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

<<编码>> 第 16 章 存储器组织(3)--3-8 译码器 示例电路

3-8 译码器 info::操作说明 “写入” 开关先断开(Q 为低电平, 表示不写入) S2-S1-S0 设置一个二进制数, 选中 Q0~Q7 其中一个作为 Q 的输出 “数据输入” 端置入要保存的数(0或1) 闭合 “写入” 开关, 对应的一位锁存器中的 W 为高电平, 表示可以写入, “数据输入” 的值最终…

嵌入式常用GUI介绍

目录 前言一、GuiLite二、LVGL三、SimpleGUI四、MiniGUI五、emWin六、TouchGFX七、uGUI八、GFX九、Embedded Wizard十、CrankSoftware十一、PEG Graphics Software十二、Guiliani十三、MPLAB Harmony Graphics Suite 前言 图形用户界面&#xff08;Graphical User Interface&am…

关系数据库设计之Armstrong公理详解

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 一、Armstrong公理简介 Armstrong公理是一组在关系数据库理论中用于推导属性依赖的基本规则。这些公理是以著名计算机科学家威廉阿姆斯特朗&…

优化内存工具 | RAM Saver Pro v24.9 便携版

RAM Saver是一款专业的RAM优化工具&#xff0c;旨在提高计算机的性能和运行速度。它通过多种优化技术&#xff0c;如内存碎片整理、CPU和主板缓存效率提升、恢复内存等&#xff0c;为应用程序提供更多的内存资源&#xff0c;从而使系统运行更加流畅。适合所有需要优化内存使用和…

EMT-LTR--学习任务间关系的多目标多任务优化

EMT-LTR–学习任务间关系的多目标多任务优化 title&#xff1a; Learning Task Relationships in Evolutionary Multitasking for Multiobjective Continuous Optimization author&#xff1a; Zefeng Chen, Yuren Zhou, Xiaoyu He, and Jun Zhang. journal&#xff1a; IEE…

银河麒麟V10系统崩溃后的处理

银河麒麟V10系统崩溃后的处理 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 当银河麒麟桌面操作系统V10崩溃无法启动时&#xff0c;直接使用备份还原工具不可行。此时&#xff0c;应采取以下步骤&#xff1a; 进入救援模式或LiveCD&#x…

攻防世界---->Windows_Reverse1

学习笔记。 前言&#xff1a;不会&#xff0c;代码越简洁&#xff0c;越难受 T ^ T 下载 查壳。 UPX脱壳。 此题脱壳后的程序&#xff0c;是不能运行的。 网上wp&#xff0c;说是因为作者采用了ASLR(地址随机化) 解决方法&#xff1a;一&#xff1a;用XP运行调试。 方法二&a…

0基础跟德姆(dom)一起学AI 数据处理和统计分析05-Pandas数分入门

* DataFrame读写文件 * DataFrame加载部分数据 * DataFrame分组聚合计算 * DataFrame常用排序方式 * DataFrame案例-链家数据分析 --- 1.DataFrame-保存数据到文件 * 格式 python df对象.to_数据格式(路径) # 例如: df.to_csv(data/abc.csv) * 代码演示 > 如…

Deepin man 没有关于printf 的手册页条目

问题 man 3 printf&#xff1a;在第 3 节中没有关于 printf 的手册页条目。 解决方法&#xff1a;安装manpages发开库。 搜索包 apt search manpages安装 sudo apt install manpages-dev若没有manpages-dev&#xff0c;安装manpages-posix-dev&#xff0c;应该也可以&#x…

【成品论文】2024年华为杯研赛E题25页高质量成品论文(后续会更新

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 点击链接加入【2024华为杯研赛资料汇总】&#xff1a;https://qm.qq.com/q/Mxv2XNWxUc https://qm.qq.com/q/Mxv2XNWxUc 高速公路应急车道紧急启用模型…

深度学习02-pytorch-03-张量的数值计算

张量&#xff08;Tensor&#xff09;是多维数组的通用化概念&#xff0c;它可以表示标量&#xff08;0维&#xff09;、向量&#xff08;1维&#xff09;、矩阵&#xff08;2维&#xff09;以及更高维度的数据。在深度学习和数值计算中&#xff0c;张量是基础数据结构&#xff…

基于python的api扫描器系统的设计与实现

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

MySQL练手题--周内每天销售情况(困难)

一、准备工作 Create table If Not Exists Orders (order_id int, customer_id int, order_date date, item_id varchar(30), quantity int); Create table If Not Exists Items (item_id varchar(30), item_name varchar(30), item_category varchar(30)); Truncate table Or…

【软件文档】软件项目试运行方案(word实际套用2024)

软件项目试运行方案&#xff08;Word原件参考&#xff09; 一、试运行目的 二、试运行的准备 三、试运行时间 四、试运行制度 五、试运行具体内容与要求 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c…

python画图1

import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] ["SimHei"]# 模拟数据 years [2016, 2017, 2018, 2019, 2020, 2021, 2022] market_size [7950, 8931, 9940, 11205, 12305, 13199, 14980] my_color #3e9df5plt.plot(years, market_s…

《他们的奇妙时光》圆满收官,葛秋谷新型霸总获好评

9月21日&#xff0c;由王枫、张开法执导&#xff0c;周洁琼、葛秋谷领衔主演的奇幻爱情题材都市喜剧《他们的奇妙时光》圆满收官。该剧讲述了意外被游戏角色刑天附体的设计师宋灵灵&#xff0c;为修复游戏漏洞&#xff0c;被迫与能压制刑天的甲方总裁萧然同居&#xff0c;两人在…

局域网设备自动发现常用方法

文章目录 需求实现方法ARP (Address Resolution Protocol)Ping ip的流程抓包如下代码实现 mDNS 对比测试Avahi 介绍Avahi 安装Avahi 使用测试代码 需求 局域网设备自动发现是软件开发中的一个常见且重要的需求&#xff0c;它简化了设备间的协作机制&#xff0c;降低了软件各模…

MySQL内存(Buffer Pool)

Buffer Pool MySQL 的数据存在磁盘&#xff0c;但是不能每次读取数据都从磁盘里去&#xff0c;这样磁盘IO太频繁&#xff0c;存在性能问题。 InnoDB设计了一个缓存池&#xff08;Buffer Pool&#xff09;&#xff0c;缓冲池在内存中。 默认配置Buffer Pool大小为128MB&#xf…

Trapezoidal Decomposition梯形分解算法(TCD)

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言Trapezoidal Decomposition梯形分解算法&#xff08;TCD&#xff09;原理&#xff08;1&#xff09;第一种原理&#xff08;2…

DataX实战:从MongoDB到MySQL的数据迁移--修改源码并测试打包

在现代数据驱动的业务环境中&#xff0c;数据迁移和集成是常见的需求。DataX&#xff0c;作为阿里云开源的数据集成工具&#xff0c;提供了强大的数据同步能力&#xff0c;支持多种数据源和目标端。本文将介绍如何使用DataX将数据从MongoDB迁移到MySQL。 环境准备 安装MongoDB…