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

news2025/1/20 22:11:22

数据结构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;
  else
    return 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;
  else
    node[parenta] = parentb;
}

4、check函数

看看两个结点祖宗结点是否一样,输出对应数据
void check(int a, int b)
{
  if (find(a) == find(b))
    cout << "yes" << endl;
  else
    cout << "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.";
  else
    cout << "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;
  else
    return node[a] = find(node[a]);
}

void insert(int a, int b)
{
  int parenta = find(a), parentb = find(b);
  if (parenta > parentb)
    node[parentb] = parenta;
  else
    node[parenta] = parentb;
}

void check(int a, int b)
{
  if (find(a) == find(b))
    cout << "yes" << endl;
  else
    cout << "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.";
  else
    cout << "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.coloradmin.cn/o/2153577.html

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

相关文章

众数信科AI智能体政务服务解决方案——寻知智能笔录系统

政务服务解决方案 寻知智能笔录方案 融合民警口供录入与笔录生成需求 2分钟内生成笔录并提醒错漏 助办案人员二次询问 提升笔录质量和效率 寻知智能笔录系统 众数信科AI智能体 产品亮点 分析、理解行业知识和校验规则 AI实时提醒用户文书需注意部分 全文校验格式、内…

【在Linux世界中追寻伟大的One Piece】进程间关系与守护进程

目录 1 -> 进程组 1.1 -> 什么是进程组 1.2 -> 组长进程 2 -> 会话 2.1 -> 什么是会话 2.2 -> 如何创建会话 2.3 -> 会话ID(SID) 3 -> 控制终端 4 -> 作业控制 4.1 -> 什么是作业(job)和作业控制(Job Control) 4.2 -> 作业号 4.3…

Spring:项目中的统一异常处理和自定义异常

介绍异常的处理方式。在项目中&#xff0c;都会进行自定义异常&#xff0c;并且都是需要配合统一结果返回进行使用。 1.背景引入 &#xff08;1&#xff09;背景介绍 为什么要处理异常&#xff1f;如果不处理项目中的异常信息&#xff0c;前端访问我们后端就是显示访问失败的…

20240921在友善之臂的NanoPC-T6开发板上确认宸芯的数传模块CX6602N的AT命令

console:/dev # cat ttyUSB1 & console:/dev # echo AT > ttyUSB1 20240921在友善之臂的NanoPC-T6开发板上确认宸芯的数传模块CX6602N的AT命令 2024/9/21 21:03 【必须】Android12/Linux&#xff08;Buildroot&#xff09;都必须要&#xff01; 4、【Android12默认打开U…

电脑硬件-机械硬盘

简介 机械硬盘是电脑的主要存储媒介之一&#xff0c;通常用于存储一些文件资料或者学习视频笔记等比较大的内容。 结构 采用磁盘存储数据&#xff0c;使用温彻斯特的结构&#xff0c;特有四个特点&#xff1a; 1.磁头、盘片和运动机构安装在一个密封的腔体内。 2.盘片告诉旋…

一图快速看懂flink source的设计实现

文章目录 整体来说多个处理流程是解偶的&#xff0c;这样可以在面对多数据源情况下&#xff0c;能更加的灵活。 下面只展示了&#xff0c;主要的一些流程 下面补充一点&#xff0c;读取文件状态的保存&#xff0c;切分信息用了一个 ListState 来保存。具体要保存的信息&#x…

day2-1 app端文章查看

首先一共三张表 然后大致过程就是三层架构 用mp实现 具体出现的问题 1 测试的时候后端代码启动不了 先在maven clean一下 具体流程 然后执行完之后建议把这三个模块的target文件删除一下再运行 最后的话 如果还是报错 也是正常的 因为后边的东西都没写有些文件没有用到 2…

常见的中间件漏洞

Tomcat CVE-2017-12615 访问主页进行抓包 修改传参方式为put 放包进行连接 后台弱⼝令部署war包 访问主页试用默认账号密码tomcat/tomcat进行登录后 将哥斯拉生成的jsp木马文件压缩城成zip文件&#xff0c;然后再修改zip后缀文war 然后进行上传 使用哥斯拉进行测试连接 CVE-…

基于SpringBoot+Vue的在线酒店预订系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

微服务——网关登录校验(一)

1.网关登录校验 微服务中的网关登录校验是微服务架构中常见的一种安全机制&#xff0c;用于在请求到达微服务之前&#xff0c;对用户的身份进行验证&#xff0c;确保只有合法的用户才能访问相应的服务。 在微服务架构中&#xff0c;每个微服务都是独立部署的&#xff0c;它们之…

Apipost IDEA插件新升级,Apipost Helper上架IDEA插件市场

大家好&#xff01;今天向大家介绍一个非常方便的IDEA插件——Apipost Helper&#xff01;相信很多使用过Apipost的朋友在开发过程中都希望能够直接将编写好的API同步至Apipost&#xff0c;而无需手动填写。前段时间&#xff0c;Apipost推出了Apipost IDEA插件的内测版&#xf…

macOS平台编译libidn2库给iOS及macOS用

1.克隆源码: git clone https://gitlab.com/libidn/libidn2.git --recursive 2.安装依赖库: pkg-config也要安装 3.启动bootstrap生成configure 配置成功 configure生成成功

概率论与数理统计(2)

第一节博客已经整理了求导的公式&#xff0c;一些常用的概念。链接如下&#xff1a;高等数学基础&#xff08;1&#xff09;-CSDN博客。 第二节博客整理了微积分的公式及其相关概念。链接如下&#xff1a;高等数学基础&#xff08;2&#xff09;——微积分-CSDN博客 第三节博客…

主流卷积神经网络CNN总结

ResNet&#xff08;2015&#xff09;残差神经网络 残差结构 ResNet50具体卷积结构图 ResNeXt&#xff08;2016&#xff09;加入了分组卷积的思想&#xff0c;将原ResNet网络中的block替换成由group分组的block&#xff0c;两者得到的feature map一致&#xff0c;只是参数量更少…

计算机网络(月考一知识点)

文章目录 计算机网络背诵默写版计算机网络知识点&#xff08;月考1版&#xff09; 计算机网络背诵默写版 为我自己留个印记&#xff0c;本来荧光笔画的是没记住的&#xff0c;但是后面用紫色的&#xff0c;结果扫描的时候就看不见了。 计算机网络知识点&#xff08;月考1版&a…

耳夹式耳机值得买吗?揭秘耳夹式耳机六大避坑指南!

耳夹式耳机值得买吗&#xff1f;这是很多人的疑问&#xff0c;但是夹耳式耳机火起来跟当下人们对健康运动的需求密不可分&#xff0c;入耳式耳机照顾了听音需求就很难兼顾环境音&#xff0c;还有耳部健康和佩戴舒适度等等&#xff0c;而运动时半入耳式耳机又容易掉&#xff0c;…

T4—猴痘识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 1.导入数据 #设置gpu from tensorflow import keras from tensorflow.keras import layers,models import os, PIL, pathlib import matplotlib.pyplot as pl…

【刷题—双指针】复写0、三数之和、四数之和

目录 一、复写0二、三数之和三、四数之和 一、复写0 题目&#xff1a; 注意&#xff1a;题目要求是原数组上复写 思路&#xff1a; 一、确定最后一个复写的位置。定义两个变量cur等于0&#xff0c;dest等于-1&#xff0c;让cur去遍历数组。如果cur指向的元素是0&#xff0c;…

[SAP ABAP] 创建数据元素

我们可以使用事务码SE11创建数据元素 输入要创建的数据类型的名称&#xff0c;然后点击创建 选择数据元素并进行确定 输入简短描述并为数据元素分配一个域&#xff0c;会自动带出数据类型以及长度 创建域可参考该篇文章 创建域https://blog.csdn.net/Hudas/article/details/…

Hive企业级调优[6]——HQL语法优化之任务并行度

目录 HQL语法优化之任务并行度 优化说明 Map端并行度 Reduce端并行度 优化案例 HQL语法优化之任务并行度 优化说明 对于分布式计算任务来说&#xff0c;设置一个合理的并行度至关重要。Hive的计算任务依赖于MapReduce框架来完成&#xff0c;因此并行度的调整需要从Map端和…