[华为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要+1
        count = 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[]>() {  //构建成本排序
            @Override
            public 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.mfbz.cn/a/585123.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣刷题 63.不同路径 II

题干 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

(css)鼠标移出样式不变

(css)鼠标移出样式不变 需求&#xff1a;列表鼠标移入切换样式&#xff0c;移出保持不变 <divv-for"(item, index) of newsList":key"index"class"news-list":class"{active : change index}"tabindex"1"mouseenter&quo…

docker各目录含义

目录含义builder构建docker镜像的工具或过程buildkit用于构建和打包容器镜像&#xff0c;官方构建引擎&#xff0c;支持多阶段构建、缓存管理、并行化构建和多平台构建等功能containerd负责容器生命周期管理&#xff0c;能起、停、重启&#xff0c;确保容器运行。负责镜管理&am…

2024最新的,免费的 ChatGPT 网站AI(八个)

ChatGPT是美国人工智能研究实验室OpenAI在2022年11月推出的一款人工智能技术驱动的语言模型应用。它基于GPT-3.5架构&#xff08;后续还有GPT-4架构的升级版&#xff09;构建&#xff0c;拥有强大的自然语言处理能力和上下文理解能力&#xff0c;能够参与多轮对话&#xff0c;为…

恩智浦如何使用DITA

▲ 搜索“大龙谈智能内容”关注公众号▲ 作者 | John Walker - NXP销售和市场营销业务分析师 2013年4月18日 作为恩智浦半导体公司销售和市场部的业务分析师&#xff0c;我负责恩智浦半导公司产品信息的数据/内容模型、流程和工具。我来自英国&#xff0c;但自2000年以来一…

Python3 循环语句

Python 中的循环语句有 for 和 while。 Python 循环语句的控制结构图如下所示&#xff1a; while 循环 Python 中 while 语句的一般形式&#xff1a; while 判断条件(condition)&#xff1a;执行语句(statements)…… 执行流程图如下&#xff1a; 同样需要注意冒号和缩进。…

go语言实现简单登陆返回token样例

目录 1、代码实现样例&#xff1a; 2、postman调用&#xff0c;获取登陆后的token&#xff1a; 1、代码实现样例&#xff1a; package mainimport ("net/http""time""github.com/dgrijalva/jwt-go""github.com/gin-gonic/gin" )var …

Leetcode—2639. 查询网格图中每一列的宽度【简单】

2024每日刷题&#xff08;121&#xff09; Leetcode—2639. 查询网格图中每一列的宽度 实现代码 class Solution { public:int func(int num) {if(num 0) {return 1;}int len 0;while(num ! 0) {len;num / 10;}return len;}vector<int> findColumnWidth(vector<ve…

怎么通过isinstance(Obj,Class)验证?【isinstance】

最近有这样一个项目&#xff0c;这个项目可以用一个成熟的项目的构造树&#xff0c;读取树&#xff0c;再检索的过程&#xff0c;现在有新的需求&#xff0c;另一个逻辑构造同样节点结构的树&#xff0c;pickle序列化保存&#xff0c;再使用原来项目的读取、检索函数&#xff0…

Altair® PBS Professional®——行业超前的 HPC 和高吞吐量计算工作负载管理器和作业调度程序

PBS Professional 是一款快速、强大的工作负载管理器&#xff0c;旨在提高生产力、优化利用率和效率&#xff0c;并简化集群、云和超级计算机的管理——从极大的 HPC 工作负载到数百万个小型、高吞吐量作业。PBS Professional 能够自动执行作业调度、管理、监视和报告任务&…

4月25日 C++day3

#include <iostream> using namespace std;class Person {const string name;int age;char sex; public:Person():name("lisi"){cout << "Person无参构造" << endl;}Person(string name,int age,char sex):name(name),age(age),sex(sex)…

WordPress内存不足如何处理

本周有一个客户&#xff0c;购买Hostease的Linux虚拟主机&#xff0c;询问我们的在线客服&#xff0c;站点出现WordPress内存不足如何处理。我们为用户提供教程&#xff0c;用户很快完成了设置。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对您有帮助。 WordPre…

Sora新突破!AI生成电影迈向新阶段,配音版Sora登场!将如何改变影视行业?

Sora之后迎来新突破&#xff01; 配音版Sora来袭&#xff0c;AI生成电影又更近一步&#xff01; 在2024年伊始&#xff0c;人工智能界迎来了一次创新性的突破&#xff0c;由AI语音技术的先锋公司ElevenLabs带头实现。他们最近的成就体现在为OpenAI的Sora视频模型提供了令人动容…

k8s学习(三十七)centos下离线部署kubernetes1.30(高可用)

文章目录 准备工作1、升级操作系统内核1.1、查看操作系统和内核版本1.2、下载内核离线升级包1.3、升级内核1.4、确认内核版本 2、修改主机名/hosts文件2.1、修改主机名2.2、修改hosts文件 3、关闭防火墙4、关闭SELINUX配置5、时间同步5.1、下载NTP5.2、卸载5.3、安装5.4、配置5…

Leetcode—1041. 困于环中的机器人【中等】

2024每日刷题&#xff08;121&#xff09; Leetcode—1041. 困于环中的机器人 实现代码 class Solution { public:bool isRobotBounded(string instructions) {int x 0;int y 0;int d 0;vector<vector<int>> direction{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};for…

[嵌入式系统-54]:RT-Thread:内核基础与核心概念

目录 前言&#xff1a; 一、RT-Thread 内核介绍 1.线程调度 2.时钟管理 3.线程间同步与互斥 4.线程间通信 5.内存管理 6.I/O 设备管理 二、RT-Thread 启动流程 三、RT-Thread 程序内存分布 四、RT-Thread 自动初始化机制 五、RT-Thread 内核对象模型 1. 静态对象和…

ElasticSearch总结1

目录 一、ElasticSearch介绍&#xff1a; 举例一&#xff1a; 举例二&#xff1a; 举例三&#xff1a; 二、ELK技术栈 三、Elasticsearch 的基本概念&#xff1a; 四、正向索引和倒排索引&#xff1a; 正向索引&#xff1a; 倒排索引&#xff1a; 五、Mysql和Elastics…

http1.1和http2.0的同源请求数限制

判断协议版本 :scheme: 在请求头中表示使用的是HTTP/2协议。即 出现 :开头的请求头Chrome 只支持查看 HTTP/1.x 的 Raw Headers&#xff0c;对这种请求&#xff0c;会给出 view source 选项。HTTP2.0不给出。可继续学习 https://www.cnblogs.com/kirito-c/p/10360868.html抓包…

渐变边框文字效果?CSS 轻松拿捏!

今天&#xff0c;有个群友问了我这么一个问题&#xff0c;如果不想切图&#xff0c;是否有办法实现带渐变边框的字体效果&#xff1f;如下所示&#xff1a; 本文&#xff0c;就将尝试一下&#xff0c;在 CSS 中&#xff0c;我们可以如何尽可能的实现这种渐变边框字体效果。 元…

从浏览器输入url到页面加载(八)你的web网站有几台服务器?

你有没有想过一个问题&#xff0c;做为一名前端开发&#xff0c;你的网站上线后&#xff0c;准备了几台服务器&#xff1f;前端静态资源用了几台&#xff0c;你调接口的那个后端部署了几台&#xff1f; 目录 1 没接触过这个问题很正常 2 当访问量上升的时候 2.1 提升带宽 …
最新文章