[华为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.hqwc.cn/news/661659.html

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

相关文章

第11章 数据库技术(第一部分)

一、数据库技术术语 &#xff08;一&#xff09;术语 1、数据 数据描述事物的符号描述一个对象所用的标识&#xff0c;可以文字、图形、图像、语言等等 2、信息 现实世界对事物状态变化的反馈。可感知、可存储、可加工、可再生。数据是信息的表现形式和载体&#xff0c;信…

微搭低代码入门01微搭底层能力介绍

目录 1 什么是应用2 有服务器和无服务器3 关系型数据库和文档型数据库4 云存储5 云函数6 静态网站托管总结 日常经常解答初学者的问题&#xff0c;问的最多的就是学习微搭&#xff0c;需要多久&#xff0c;要不要学习代码。有的初学者心比较急躁&#xff0c;总是希望一蹴而就&a…

ORACLE 性能优化 高水位调节

当我需要去做优化时,有一个固定的优化思路:SQL优化->索引优化->分区优化->优化器hints优化 SQL 语句优化 1. 选用适合的 ORACLE 优化器 ORACLE 的优化器共有 3 种 : a. RULE ( 基于规则 ) b. COST ( 基于成本 ) c. CHOOSE ( 选 择性) 设置缺省的优化器, 可以通…

ps科研常用操作,制作模式图 扣取想要的内容元素photoshop

复制想要copy的图片&#xff0c; 打开ps---file-----new &#xff0c;ctrolv粘贴图片进入ps 选择魔棒工具&#xff0c;点击想要去除的白色区域 然后&#xff0c;cotrol shift i&#xff0c;反选&#xff0c; ctrol shiftj复制&#xff0c;复制成功之后&#xff0c;一定要改…

Java | Leetcode Java题解之第59题螺旋矩阵II

题目&#xff1a; 题解&#xff1a; class Solution {public int[][] generateMatrix(int n) {int num 1;int[][] matrix new int[n][n];int left 0, right n - 1, top 0, bottom n - 1;while (left < right && top < bottom) {for (int column left; co…

VMware虚拟机安装Linux(CentOS)【超详细】

参考大佬文章&#xff1a;VMware虚拟机安装Linux教程(超详细)_vmware安装linux虚拟机-CSDN博客 目录 一、获取映射文件 二、新建虚拟机 三、安装操作系统 四、切换系统用户 一、获取映射文件 参考大佬文章获取映射文件&#xff0c;以及对应修改后缀名的方法 二、新建虚拟…

就业班 第三阶段(nginx) 2401--4.25 day4 nginx4 流量控制+访问

16、nginx 错误页面配置 nginx错误页面包括404 403 500 502 503 504等页面&#xff0c;只需要在server中增加以下配置即可&#xff1a; #error_page 404 403 500 502 503 504 /404.html;location /404.html {root /usr/local/nginx/html;}注意&#xff1a; /usr/local/…

github托管静态页面

免费在线上空间&#xff0c;不用简直就是浪费&#xff0c;关键还不限流量赶紧去折腾一下 这是搭建的GitHub托管网页&#xff0c;由于是GitHub的服务器&#xff0c;国内访问会非常&#xff01;慢 下载 Watt Toolkit 这里我建议下载一个软件 Watt Toolkit 它是一个开源跨…

用大模型生成带文字的海报

本文代码讲整合在&#xff1a; GitHub - liangwq/Chatglm_lora_multi-gpu: chatglm多gpu用deepspeed和 这篇文章介绍如何利用VLMdiffusion模型来搭建一条文本生成海报的链路。搭建这条链路有两个应用&#xff1a;1.实际的业务中需要批量生产文字图海报可以用&#xff0c;2.可以…

Progress Kemp LoadMaster 远程命令执行漏洞复现(CVE-2024-1212)

0x01 产品简介 Progress Kemp LoadMaster是一款负载均衡和应用交付控制器,由Progress Software Corporation(前身为Kemp Technologies)开发和提供。该产品旨在提供高可用性、可靠性和性能优化的应用交付解决方案,帮助组织管理和优化其应用程序交付流量。 0x02 漏洞概述 …

短信测压APP(新增Python跑接口)

新增Python跑接口测压&#xff0c;手机电脑都可跑

Python 深度学习(二)

原文&#xff1a;zh.annas-archive.org/md5/98cfb0b9095f1cf64732abfaa40d7b3a 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第五章&#xff1a;图像识别 视觉可以说是人类最重要的感官之一。我们依赖视觉来识别食物&#xff0c;逃离危险&#xff0c;认出朋友和家人…