[华为OD] C卷 5G网络 现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站 200

题目

现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站,编号固定为1到N,接 

下来需要各个基站之间使用光纤进行连接以确保基站能互联互通,不同基站之间架设光纤的成 

本各不相同,且有些节点之间已经存在光纤相连,请你设计算法,计算出能联通这些基站的最 

小成本是多少。

注意,基站的联通具有传递性,即基站A与基站B架设了光纤,基站B与基站C也架设了光 

纤,则基站A与基站C视为可以互相联通 

输入描述

第一行输入表示基站的个数N,其中0<N<=20

第二行输入表示具备光纤直连条件的基站对的数目M,其中0 < M < N * (N - 1) / 2

第三行开始连续输入M行数据,格式为X Y Z P ,其中X Y表示基站的编号,0 < X < = ?,0 

< Y < = N且X不等于丫,Z表示在X Y之间架设光纤的成本,其中0 < Z < 1 0 0 , P表示是否 

已存在光纤连接,0表示未连接,1表示已连接。

输出描述

如果给定条件,可以建设成功互联互通的5G网络,则输出最小的建设成本,

如果给定条件,无法建设成功互联互通的5G网络,则输出-1

示例1:

输入

3

3

1 2 3 0

1 3 1 0

2 3 5 0

输出

4

说明

只需要在1,2以及2,3基站之间铺设光纤,其成本为3+1=4

示例2

输入

3

1

1 2 5 0

输出

-1

说明

3基站无法与其他基站连接,输出-1

示例3:

输入

3

3

1 2 3 0

1 3 1 0

2 3 5 1

输出

1

说明

2,3基站已有光纤相连,只有要再1,3站点2向铺设,其成本为1

题解:

这种图节点的题目,优先考虑用并查集的思路进行解决。

关于并查集,可以参考:. - 力扣(LeetCode)

图论——并查集(详细版)_哔哩哔哩_bilibili

带权并查集_哔哩哔哩_bilibili

这三个视频看下大致就清楚并查集和带权并查集了。

并查集主要有三点,查找相同根find(x),就可以判断是否在同一组网络里面了

联合union(int num1,int num2) ,不同网络里面的num1和num2相连。

这个题目里面还要算最小的联通网络成本,所以我们要构建一个网络,这个数据里面先按照联通成本进行排序,然后轮询,计算两个节点是否在同一个网络,在的话,就不管,不在的话,那么成本就加上,然后并查集中两个节点进行连接。这个题还是比较有难度的

代码:

public class NetNode {private int root[];private int count;public NetNode(int size) {root = new int[size+1]; //这里点的序号是从1开始的,所以size要+1count = 0;for(int i =0;i<size+1;i++){root[i] = i;}}public int find(int x){if(x==root[x]){return x;}else {return root[x] = find(root[x]);}}public void union(int num1,int num2){root[find(num1)] = find(num2);count++;}public int getCount(){return count;}
}
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;public class FiveG {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int totalCount = Integer.valueOf(sc.nextLine());int m = Integer.valueOf(sc.nextLine());NetNode ne = new NetNode(totalCount);List<int[]> netWork = new ArrayList<>();for (int i = 0; i < m; i++) {String inputStr = sc.nextLine();String[] inputArr = inputStr.split(" ");int[] inputNum = new int[inputArr.length];for (int j = 0; j < inputArr.length; j++) {inputNum[j] = Integer.valueOf(inputArr[j]);}if (inputNum[3] == 1) {if (ne.find(inputNum[0]) != ne.find(inputNum[1])) {ne.union(inputNum[0], inputNum[1]);}} else {netWork.add(new int[]{inputNum[0], inputNum[1], inputNum[2]});}}netWork.sort(new Comparator<int[]>() {  //构建成本排序@Overridepublic int compare(int[] o1, int[] o2) {return o1[2] - o2[2];}});int result = 0;for (int i = 0; i < netWork.size(); i++) {System.out.println("i=" + i + " netWork.get(i)[0] = " + netWork.get(i)[0] +" netWork.get(i)[1]= " + netWork.get(i)[1]);if (ne.find(netWork.get(i)[0]) != ne.find(netWork.get(i)[1])) {ne.union(netWork.get(i)[0], netWork.get(i)[1]);result += netWork.get(i)[2];}if(ne.getCount() == totalCount - 1){break;}}System.out.println("totalCount = " + ne.getCount());if (ne.getCount() < totalCount - 1) {System.out.println(-1);return;}System.out.println(result);}
}

验证:

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

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

相关文章

mongodb使用debezium

前置 服务器上需要安装jdk11 jdk下载地址 kafka安装 官网下载地址 安装教程 debezium 安装 运行 Debezium 连接器需要 Java 11 或更高版本 Debezium 并不是一个独立的软件&#xff0c;而是很多个 Kafka 连接器的总称。这些 Kafka 连接器分别对应不同的数据库&#xff0c;…

十一、大模型-Semantic Kernel与 LangChain 的对比

Semantic Kernel 与 LangChain 的对比 Semantic Kernel 和 LangChain 都是用于开发基于大型语言模型&#xff08;LLM&#xff09;的应用程序的框架&#xff0c;但它们各有特点和优势。 基本概念和目标 Semantic Kernel 是一个由微软开发的轻量级 SDK&#xff0c;旨在帮助开发…

uniapp 自定义 App启动图

由于uniapp默认的启动界面太过普通 所以需要自定义个启动图 普通的图片不可以过不了苹果的审核 所以使用storyboard启动图 生成 storyboard 的网站&#xff1a;初雪云-提供一站式App上传发布解决方案

短视频素材哪个App最好?短视频素材哪里有免费的?

在数字媒体的黄金时代&#xff0c;富有创意的视频内容已成为吸引观众的关键。高质量的视频素材不仅能增强视觉效果&#xff0c;还能提升整体叙述的力度。以下列出了一系列全球顶尖的视频素材提供网站&#xff0c;它们将为你的广告制作、社交媒体或任何视频项目提供极具影响力的…

C++浮点数format时的舍入问题

C浮点数format时的舍入问题 首先有这样一段代码&#xff1a; #include <iostream> #include <stdio.h> using namespace std;int main() {cout << " main begin : " << endl;printf("%.0f \r\n", 1.5);printf("%.0f \r\n&…

jenkins教程

jenkins 一、简介二、下载安装三、配置jdk、maven和SSH四、部署微服务 一、简介 Jenkins是一个流行的开源自动化服务器&#xff0c;用于自动化软件开发过程中的构建、测试和部署任务。它提供了一个可扩展的插件生态系统&#xff0c;支持各种编程语言和工具。 Jenkins是一款开…

ROM修改进阶教程------如何去除安卓机型系统的开机向导 几种操作步骤解析

在和很多工作室定制化系统中。手机在第一次启动的时候系统都会进入设置向导,虽然可以设置手机的基本配置。但有很多客户需要去除手机的开机向导来缩短开机时间。确保手机直接进入工作状态。那么今天的教程针去除对开机向导的几种方法做个解析。机型很多版本不同。操作也有不同…

ENVI下遥感积雪面积信息的提取

积雪是气温、降水变化的最敏感的指示因子之一&#xff0c;ENVI为积雪面积信息的提取提供了多种技术方法 光谱统计学方法 光谱统计学提取积雪面积信息主要利用感兴趣区域ROI&#xff08;样本&#xff09;的选择&#xff0c;利用传统的监督方法实现。 决策树方法 决策树方法提取…

《HCIP-openEuler实验指导手册》1.7 Apache虚拟主机配置

知识点 配置步骤 需求 域名访问目录test1.com/home/source/test1test2.com/home/source/test2test3.com/home/source/test3 创建配置文件 touch /etc/httpd/conf.d/vhost.conf vim /etc/httpd/conf.d/vhost.conf文件内容如下 <VirtualHost *.81> ServerName test1.c…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

阿里云开源大模型开发环境搭建

ModelScope是阿里云通义千问开源的大模型开发者社区&#xff0c;本文主要描述AI大模型开发环境的搭建。 如上所示&#xff0c;安装ModelScope大模型基础库开发框架的命令行参数&#xff0c;使用清华大学提供的镜像地址 如上所示&#xff0c;在JetBrains PyCharm的项目工程终端控…

2024深圳杯数学建模竞赛D题(东三省数学建模竞赛D题):建立非均质音板振动模型与参数识别模型

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓&#xff08;浏览器打开&#xff09; https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 2024深圳杯数学建模竞赛D题&#xff08;东三省数学建模竞赛D题&#xff0…

深入探索计算机视觉:高级主题与前沿应用的全面解析

引言 计算机视觉&#xff0c;作为人工智能领域的一个重要分支&#xff0c;旨在让计算机能够“看”懂世界&#xff0c;理解和解释视觉场景。随着深度学习技术的迅猛发展&#xff0c;计算机视觉已经在许多领域取得了显著的进展&#xff0c;如自动驾驶、安防监控、医疗诊断等。在…

Go 语言基础(一)【基本用法】

前言 最近心情格外不舒畅&#xff0c;不仅仅是对前途的迷茫&#xff0c;这种迷茫倒是我自己的问题还好&#xff0c;关键它是我们这种普通吗喽抗衡不了的。 那就换个脑子&#xff0c;学点新东西吧&#xff0c;比如 Go&#xff1f; 1、Go 语言入门 介绍就没必要多说了&#xff0…

Linux(ubuntu)—— 用户管理user 用户组group

一、用户 1.1、查看所有用户 cat /etc/passwd 1.2、新增用户 useradd 命令&#xff0c;我这里用的是2.4的命令。 然后&#xff0c;需要设置密码 passwd student 只有root用户才能用passwd命令设置其他用户的密码&#xff0c;普通用户只能够设置自己的密码 二、组 2.1查看…

CentOS/Anolis的Linux系统如何通过VNC登录远程桌面?

综述 需要在server端启动vncserver&#xff0c;推荐tigervnc的server 然后再本地点来启动client进行访问&#xff0c;访问方式是IPport&#xff08;本质是传递数据包到某个ip的某个port&#xff09; 然后需要防火墙开启端口 服务器上&#xff1a;安装和启动服务 安装服务 y…

Macos安装OrbStack

什么是OrbStack OrbStack 是一种在 macOS 上运行容器和 Linux 机器的快速、轻便和简单方法。它是 Docker Desktop 和 WSL 的超强替代品&#xff0c;所有这些都在一个易于使用的应用程序中。 在Macos M系列芯片上&#xff0c;经常遇到docker镜像不兼容的问题&#xff0c;此时使…

LangChain入门2 RAG详解

RAG概述 一个典型的RAG应用程序,它有两个主要组件&#xff1a; 索引&#xff1a;从源中获取数据并对其进行索引的管道。这通常在脱机情况下发生。检索和生成&#xff1a;在运行时接受用户查询&#xff0c;并从索引中检索相关数据&#xff0c;然后将其传递给模型。 从原始数据…

【PHP】安装指定版本Composer

1、下载指定版本composer.phar文件&#xff1a;https://github.com/composer/composer/releases 2、将下载的文件添加到全局路径&#xff1a; sudo mv composer.phar /usr/local/bin/composer 3、赋予权限&#xff1a; sudo chmod x /usr/local/bin/composer 4、查看compos…

【GitHub】github学生认证,在vscode中使用copilot的教程

github学生认证并使用copilot教程 写在最前面一.注册github账号1.1、注册1.2、完善你的profile 二、Github 学生认证注意事项&#xff1a;不完善的说明 三、Copilot四、在 Visual Studio Code 中安装 GitHub Copilot 扩展4.1 安装 Copilot 插件4.2 配置 Copilot 插件&#xff0…