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

本文主要是介绍[华为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);}
}

验证:

这篇关于[华为OD] C卷 5G网络 现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站 200的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952537

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

如何使用Spring boot的@Transactional进行事务管理

《如何使用Springboot的@Transactional进行事务管理》这篇文章介绍了SpringBoot中使用@Transactional注解进行声明式事务管理的详细信息,包括基本用法、核心配置... 目录一、前置条件二、基本用法1. 在方法上添加注解2. 在类上添加注解三、核心配置参数1. 传播行为(