蓝桥每日打卡--合根植物

#蓝桥#JAVA#合根植物

题目描述

w星球的一个种植园,被分成m×n个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。

这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。

如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中一共有多少株合根植物吗?

输入描述

第一行,两个整数m,n用空格分开,表示格子的行数、列数(1≤m,n≤1000)。

接下来一行,一个整数k(0≤k≤10_{}^{5}),表示下面还有k行数据。

接下来k行,每行两个整数a,b,表示编号为a的小格子和编号为b的小格子合根了。

格子的编号一行一行,从上到下,从左到右编号。

比如:5×4的小格子,编号:

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20

输出描述

输出植物数量。

解题思路

该程序的核心目标是借助并查集算法,处理不相交集合的合并与查询问题。假定存在一个由 n 行 m 列格子所构成的区域,每个格子都能被视作一个独立的集合。通过 k 次合并操作,把某些格子所属的集合合并起来,最终输出合并操作完成后,剩余的独立集合数量。

1. 初始化
  • 输入读取:借助 Scanner 类从标准输入读取三个整数 nm 和 k。这里的 n 和 m 代表区域的行数与列数,k 则表示后续要进行的合并操作次数。

  • 连通分量数量初始化:初始状态下,每个格子都是一个独立的集合,所以连通分量的数量为 n * m,将其赋值给变量 count

  • 并查集数组初始化:创建一个长度为 n * m + 1 的数组 p,数组索引从 1 开始。把数组中每个元素的父节点初始化为其自身,即 p[i] = i,这表明每个元素最初都属于一个独立的集合。

2. 合并操作
  • 循环处理:通过 while(k-- > 0) 循环,执行 k 次合并操作。在每次循环里,读取两个整数 a 和 b,代表要将这两个格子所属的集合进行合并。

  • 查找根节点:调用 find 方法分别找出 a 和 b 所在集合的根节点 roota 和 rootbfind 方法采用递归的方式查找根节点,并且在查找过程中进行路径压缩,也就是把当前节点的父节点直接设置为根节点,这样能提高后续查找的效率。

  • 合并集合:若 roota 和 rootb 不相等,说明 a 和 b 处于不同的集合,此时将 rootb 的父节点设置为 roota,实现两个集合的合并。同时,连通分量的数量 count 减 1。

3. 输出结果

合并操作全部完成后,输出最终的连通分量数量 count,这个数量代表了经过合并操作后,剩余的独立集合数量。

代码展示

import java.util.Scanner;public class Main {// 定义一个静态数组 p,用于存储并查集的父节点信息static int[] p;// 定义一个静态变量 count,用于记录并查集中连通分量的数量static int count;public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 在此输入您的代码...// n 和 m 可能代表某种矩阵或区域的行数和列数// k 表示接下来要进行的合并操作的次数int n = sc.nextInt();int m = sc.nextInt();int k = sc.nextInt();// 初始化连通分量的数量,初始时每个元素都是一个独立的连通分量,所以数量为 n * mcount = n * m;// 初始化并查集数组 p,数组大小为 n * m + 1,索引从 1 开始p = new int[n * m + 1];// 初始化并查集,将每个元素的父节点初始化为自身for(int i = 1; i <= n * m; i++){p[i] = i;}// 循环 k 次,每次读取两个整数 a 和 b,表示要将这两个元素所在的连通分量合并while(k-- > 0){int a = sc.nextInt();int b = sc.nextInt();// 调用 connect 方法将 a 和 b 所在的连通分量合并connect(a, b);}// 输出最终的连通分量数量System.out.println(count);// 关闭 Scanner 对象,释放资源sc.close();}// 查找元素 x 所在连通分量的根节点,并进行路径压缩public static int find(int x){// 如果 x 的父节点不是它本身,说明 x 不是根节点if(p[x] != x){// 递归查找 x 的父节点的根节点,并将 x 的父节点直接设置为根节点,实现路径压缩p[x] = find(p[x]);}// 返回 x 所在连通分量的根节点return p[x];}// 合并元素 a 和 b 所在的连通分量public static void connect(int a, int b){// 查找 a 所在连通分量的根节点int roota = find(a);// 查找 b 所在连通分量的根节点int rootb = find(b);// 如果 a 和 b 所在的连通分量的根节点不同,说明它们属于不同的连通分量if(roota != rootb){// 将 b 所在连通分量的根节点的父节点设置为 a 所在连通分量的根节点,实现合并p[rootb] = roota;// 合并后,连通分量的数量减 1count--;}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性代数之矩阵特征值与特征向量的数值求解方法

文章目录 前言1. 幂迭代法&#xff08;Power Iteration&#xff09;幂法与反幂法求解矩阵特征值幂法求最大特征值编程实现补充说明 2. 逆幂迭代法&#xff08;Inverse Iteration&#xff09;移位反幂法 3. QR 算法&#xff08;QR Algorithm&#xff09;——稠密矩阵理论推导编程…

【Linux实践系列】:用c语言实现一个shell外壳程序

&#x1f525;本文专栏&#xff1a;Linux Linux实践项目 &#x1f338;博主主页&#xff1a;努力努力再努力wz 那么今天我们就要进入Linux的实践环节&#xff0c;那么我们之前学习了进程控制相关的几个知识点&#xff0c;比如进程的终止以及进程的等待和进程的替换&#xff0c;…

使用STM32CubeMX配置定时器中断实现LED每秒闪烁一次(STM32G070CBT6)

说明&#xff1a; 本案例采用的定时器3&#xff08;TIM3&#xff09;实现&#xff0c;使用其他定时器是一样配置。 如何新建一个工程以及如何配置LED的端口&#xff0c;请查看前面文章&#xff1a;使用STM32CubeMX实现LED灯每秒闪烁一次&#xff08;STM32G070CBT6单片机&…

2025年Draw.io最新版本下载安装教程,附详细图文

2025年Draw.io最新版本下载安装教程&#xff0c;附详细图文 大家好&#xff0c;今天给大家介绍一款非常实用的流程图绘制软件——Draw.io。不管你是平时需要设计流程图、绘制思维导图&#xff0c;还是制作架构图&#xff0c;甚至是简单的草图&#xff0c;它都能帮你轻松搞定。…

GStreamer —— 2.15、Windows下Qt加载GStreamer库后运行 - “播放教程 1:Playbin 使用“(附:完整源码)

运行效果 介绍 我们已经使用了这个元素&#xff0c;它能够构建一个完整的播放管道&#xff0c;而无需做太多工作。 本教程介绍如何进一步自定义&#xff0c;以防其默认值不适合我们的特定需求。将学习&#xff1a; • 如何确定文件包含多少个流&#xff0c;以及如何切换 其中。…

Python----数据可视化(Seaborn一:介绍,应用)

一、Seaborn的介绍 Seaborn 是一个基于 matplotlib 的 Python 库&#xff0c;对其进行了高级 API 的封装&#xff0c;使得作图更为方便和吸引人。尽管在大多数情况下&#xff0c;使用 Seaborn 就能够创建出美观的图表&#xff0c;但 matplotlib 提供了更高的灵活性和定制化的能…

小程序SSL证书过期怎么办?

SSL证书就像小程序的“安全锁”&#xff0c;一旦过期&#xff0c;用户访问时会被提示“不安全”&#xff0c;轻则流失客户&#xff0c;重则数据泄露&#xff01;作为企业负责人&#xff0c;如何快速解决证书过期问题&#xff1f;又该如何避免再次踩坑&#xff1f;这篇指南给你答…

Linux上位机开发实战(x86和arm自由切换)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;qt本身支持windows系统&#xff0c;也支持linux系统。不仅如此&#xff0c;qt除了支持传统的x86 cpu之外&#xff0c;还支…

Mysql的卸载安装配置以及简单使用

MySQL其它问题已经更新在&#xff1a;MySQL完善配置---可视化-CSDN博客 一、卸载 ①控制面板卸载 ②C盘隐藏项目>ProgramData>mysql相关文件夹&#xff0c;还有Program file下的MySQL文件夹 ③开始菜单栏搜索>服务&#xff0c;找到MySQL相关服务删除&#xff0c;如果再…

RabbitMQ之旅(1)

相信自己,终会成功 目录 主流MQ产品 1.kafaka 2.RocketMQ 3.RabbitMQ 在xshell上安装RabbitMQ RabbitMQ七种工作模式 1.简单模式 ​编辑 2.工作队列模式 3.发布/订阅模式 4.路由模式 5.通配符模式 6.RPC模式 AMQP.BasicProperties 设置消息属性的类 7.发布确认模…

基于Matlab的人脸识别的二维PCA

一、基本原理 传统 PCA 在处理图像数据时&#xff0c;需将二维图像矩阵拉伸为一维向量&#xff0c;这使得数据维度剧增&#xff0c;引发高计算成本与存储压力。与之不同&#xff0c;2DPCA 直接基于二维图像矩阵展开运算。 它着眼于图像矩阵的列向量&#xff0c;构建协方差矩阵…

el-pagination的使用说明

<el-paginationv-model:current-page"pageNo" //当前第几页v-model:page-size"pageSize" //每页显示多少条数据:page-sizes"[10, 20, 30]" //控制每页显示的条数:small"true" //控制分页器大小:disabled&quo…

Redis Redis介绍、安装 - Redis客户端

目录 redis是什么&#xff0c;他的应用场景是什么&#xff1f; Redis的一些主要特点和应用场景&#xff1a; redis的官方网站&#xff1a;Redis redis是键值型数据库&#xff1a;&#xff08;也就是key-value模式&#xff09;&#xff08;跟python的字典很像&#xff09; …

LWIP网络模型及接口简介(DAY 01)

目录 1.网络协议分层模型 2. LWIP三种编程接口 1.网络协议分层模型 其中各层级的封装与拆封过程 2. LWIP三种编程接口 LwIP 提供了三种编程接口&#xff0c;分别为 RAW/Callback API、NETCONN API、SOCKET API。它们的易用性从左到右依次提高&#xff0c;而执行效率从左到右依…

【Python 数据结构 14.邻接表】

希望你的眼睛可以一直笑&#xff0c;想要的都得到 —— 25.3.11 一、邻接表的概念 1.邻接表的定义 邻接表是一种表示图的数据结构。邻接表的主要概念是&#xff1a;对于图中的每个顶点&#xff0c;维护一个由与其相邻的顶点组成的列表。这个列表可以用数组、链表或其他数据结构…

01 音视频知识学习(视频)

图像基础概念 ◼像素&#xff1a;像素是一个图片的基本单位&#xff0c;pix是英语单词picture的简写&#xff0c;加上英 语单词“元素element”&#xff0c;就得到了“pixel”&#xff0c;简称px&#xff0c;所以“像素”有“图像元素” 之意。 ◼ 分辨率&#xff1a;是指图像…

git文件过大导致gitea仓库镜像推送失败问题解决(push failed: context deadline exceeded)

问题描述&#xff1a; 今天发现gitea仓库推送到某个镜像仓库的操作几个月前已经报错终止推送了&#xff0c;报错如下&#xff1a; 首先翻译报错提示可知是因为git仓库大小超过1G限制。检查本地.git文件&#xff0c;发现.git文件大小已达到1.13G。确定是.git文件过大导致&…

clickhouse集群部署保姆级教程

ClickHouse安装 版本要求 23.8及之后的版本 硬件要求 三台机器 建议配置 磁盘 ssd 500G内存 32gcpu 16c 最低配置 磁盘 机械硬盘 50G内存 4gcpu 4c 容量规划 一亿条数据大约使用1TB磁盘容量 参考官方容量推荐 安装包准备 zookeeper安装 zookeeper需要java启动&…

FANformer:融合傅里叶分析网络的大语言模型基础架构

近期大语言模型(LLM)的基准测试结果引发了对现有架构扩展性的思考。尽管OpenAI推出的GPT-4.5被定位为其最强大的聊天模型&#xff0c;但在多项关键基准测试上的表现却不及某些规模较小的模型。DeepSeek-V3在AIME 2024评测中达到了39.2%的Pass1准确率&#xff0c;在SWE-bench Ve…

Electron使用WebAssembly实现CRC-32 常用标准校验

Electron使用WebAssembly实现CRC-32 常用标准校验 将C/C语言代码&#xff0c;经由WebAssembly编译为库函数&#xff0c;可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-32 常用标准格式校验的方式。 CRC-32 常用标准校验函数WebAssembly源文件…