OD C卷 - 5G网络建设

2024-08-21 23:20
文章标签 建设 网络 od 5g

本文主要是介绍OD C卷 - 5G网络建设,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

5G网络建设 (200)

  • 选取n个地点建设5G基站,地点编号1 -> n;
  • 各个基站之间使用光纤连接,设计算法计算连通所有基站的最小成本;
  • 基站的连通具有传递性,A->B连通,B->C连通,则A->C连通;
    输入描述:
    第一行输入基站个数n, 0< n <=20;
    第二行输入已具备光纤连接的基站对数m;
    第三行开始的m行,格式为 X Y Z P,X Y表示基站编号 1-n且不相等,Z表示XY之间的光纤成本(0, 100),P表示是否已存在光纤连接,0未连接,1已连接;
    输出描述:
    输出最小的建设成本(所有基站连通),无法建设完成输出-1;

示例1
输入:
3
3
1 2 3 0
1 3 1 0
2 3 5 0
输出:
4
说明:只需在1、2及2、3之间建设光纤

示例2
输入:
3
1
1 2 5 0
输出:
-1

示例3
输入:
3
3
1 2 3 0
1 3 1 0
2 3 5 1
输出:
1

思路:

  • 并查集,实现图连通;
  • 并查集是一种高级数据结构,实现不相交集合的合并问题;
  • 步骤:
    • 初始化,每个节点的父(根)节点是自己;
    • find查找,查找每个节点的父节点,如果父节点是自己则返回自己,否则递归查找其父节点的父节点,将最终的父节点(即父为自己的节点)赋值作为前一个节点的父节点,并返回;
    • 合并,两个节点的父节点不一样,则合并,即其中一个节点所在集合的父节点->的父节点设置为另一个节点所在集合的父节点;
  • 本题思路:
    • 已连接的,只需合并,edges_num += 1;
    • 未连接的需要按照成本升序排序,然后依次建立连接,同时edges_num += 1 and total_cost += cur_cost;
    • edges_num == n - 1 则连通,否则无法连通;

class UF: # 并查集def __init__(self, n): # 1 初始化# 每个节点的父节点是自己self.fa = [i for i in range(n + 1)]self.edges = 0 # n个节点 n-1条边可以连通def find(self, x): # 2 查询节点的根# 当前节点的根,根为自己则returnif x == self.fa[x]:return x# 否则 递归查询根 (路径压缩)self.fa[x] = self.find(self.fa[x])return self.fa[x]def union(self, x, y): # 3 合并,两个集合的根不同,则合并self.fa[self.find(x)] = self.find(y)self.edges += 1 # 边数+1def get_edges(self):return self.edgesn = int(input())  # 总节点数
m = int(input())  # 连接数对
uf = UF(n)
networks = []for i in range(m): # m行data = [int(x) for x in input().strip().split()]if data[-1] == 1:# 已建立连接,使用并查集 进行合并(边+1 不计成本)if uf.find(data[0]) != uf.find(data[1]): # 根节点不同 则合并uf.union(data[0], data[1])else:# 尚未建立连接networks.append([data[0], data[1], data[2]]) # 成本即权重# 按照成本 升序排序
networks = sorted(networks, key=lambda x: x[2])total_cost = 0 # 成本
i = 0 # networks 列表索引
while True:if i >= len(networks):breakelse:# 对于尚未连接的基站,进行并查集 合并, 成本累加起来if uf.find(networks[i][0]) != uf.find(networks[i][1]): # 根节点不同,则合并# 不相交集合  的合并uf.union(networks[i][0], networks[i][1])# 成本累加total_cost += networks[i][2]# 连接的边数if uf.get_edges() == n - 1:  # n个节点 只需n-1条边 连通break# 继续合并第二组i += 1if uf.get_edges() != n - 1:total_cost = -1print(total_cost)

 

这篇关于OD C卷 - 5G网络建设的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

4G/5G全网通! FiberHome烽火5G CPE Air路由器拆机评测

《4G/5G全网通!FiberHome烽火5GCPEAir路由器拆机评测》烽火5GCPE已经使用一段时间了,很多朋友想要知道这款路由器怎么样?今天我们就来看看拆机测评... 我想大家都听说过、了解过5G。 5G是具有高速率、低时延和大连接特点的新一代宽带移动通信技术,5G通讯设施是实现人机物互联的网络基础设

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

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

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor