当前位置: 首页 > news >正文

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 5G基站光纤连接问题(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

https://app5938.acapp.acwing.com.cn/contest/2/problem/OD1072

🌍 评测功能需要 ⇒ 订阅专栏 ⇐ 后私信联系清隆解锁~

🍓OJ题目截图

在这里插入图片描述

文章目录

    • 📎在线评测链接
    • 🍓OJ题目截图
    • 🍿 5G基站光纤连接问题
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
        • 样例 1
        • 样例 2
        • 样例 3
      • 样例输出
        • 样例 1 输出
        • 样例 2 输出
        • 样例 3 输出
      • 样例解释
        • 样例 1 解释
        • 样例 2 解释
        • 样例 3 解释
      • 数据范围
      • 题解
      • 参考代码

🍿 5G基站光纤连接问题

问题描述

K小姐是一家通信公司的网络工程师,她最近被分配了一项任务:在某个城市建设5G网络。该城市已经选定了 n n n 个地点作为5G基站的位置,编号从 1 1 1 n n n。为了确保所有基站能够互联互通,K小姐需要在这些基站之间架设光纤进行连接。不同基站之间架设光纤的成本各不相同,而且有些基站之间已经存在光纤相连。K小姐的任务是设计一个算法,计算出能够联通所有基站的最小成本。需要注意的是,基站的联通具有传递性,即如果基站 A A A 与基站 B B B 架设了光纤,基站 B B B 与基站 C C C 也架设了光纤,那么基站 A A A 与基站 C C C 也视为可以互相联通。

输入格式

第一行输入一个正整数 n n n,表示基站的个数,其中 0 < n ≤ 20 0 < n \leq 20 0<n20

第二行输入一个正整数 m m m,表示具备光纤直连条件的基站对的数目,其中 0 < m < n ( n − 1 ) 2 0 < m < \frac{n(n-1)}{2} 0<m<2n(n1)

从第三行开始连续输入 m m m 行数据,每行的格式为 x y z p x\ y\ z\ p x y z p,其中 x x x y y y 表示基站的编号,满足 0 < x ≤ n 0 < x \leq n 0<xn 0 < y ≤ n 0 < y \leq n 0<yn x ≠ y x \neq y x=y; z z z 表示在 x x x y y y 之间架设光纤的成本,满足 0 < z < 100 0 < z < 100 0<z<100; p p p 表示是否已存在光纤连接,取值为 0 0 0 1 1 1,其中 0 0 0 表示未连接,而 1 1 1 表示已连接。

输出格式

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

样例输入

样例 1
3
3
1 2 3 0
1 3 1 0
2 3 5 0
样例 2
3
1
1 2 5 0
样例 3
3
3
1 2 3 0
1 3 1 0
2 3 5 1

样例输出

样例 1 输出
4
样例 2 输出
-1
样例 3 输出
1

样例解释

样例 1 解释

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

样例 2 解释

基站 3 3 3 无法与其他基站连接,因此无法建设成功互联互通的5G网络,输出 − 1 -1 1

样例 3 解释

基站 2 2 2 和基站 3 3 3 已有光纤相连,只需要在基站 1 1 1 和基站 3 3 3 之间铺设光纤,其成本为 1 1 1

数据范围

  • 0 < n ≤ 20 0 < n \leq 20 0<n20
  • 0 < m < n ( n − 1 ) 2 0 < m < \frac{n(n-1)}{2} 0<m<2n(n1)
  • 0 < x , y ≤ n 0 < x, y \leq n 0<x,yn, x ≠ y x \neq y x=y
  • 0 < z < 100 0 < z < 100 0<z<100
  • p ∈ { 0 , 1 } p \in \{0, 1\} p{0,1}

题解

这是一个经典的最小生成树问题,可以使用 Kruskal 算法或 Prim 算法求解。这里我们采用 Kruskal 来解决,首先将所有已经存在光纤连接的基站对进行合并,然后按照架设光纤的成本从小到大排序,依次尝试连接未连通的基站对。如果连接后不会形成环路,则将该条边加入最小生成树中。当所有基站都被连通后,最小生成树的边权之和就是最小的建设成本。

如果最终无法将所有基站连通,则输出 − 1 -1 1

参考代码

  • Python
# 并查集
class UnionFind:def __init__(self, n):self.parent = list(range(n + 1))self.rank = [0] * (n + 1)def find(self, x):if self.parent[x] != x:self.parent[x] = self.find(self.parent[x])return self.parent[x]def union(self, x, y):px, py = self.find(x), self.find(y)if px == py:returnif self.rank[px] < self.rank[py]:self.parent[px] = pyelif self.rank[px] > self.rank[py]:self.parent[py] = pxelse:self.parent[py] = pxself.rank[px] += 1n = int(input())
m = int(input())
uf = UnionFind(n)
edges = []for _ in range(m):x, y, w, p = map(int, input().split())if p == 1:uf.union(x, y)else:edges.append((w, x, y))edges.sort()
cost = 0
for w, x, y in edges:if uf.find(x) != uf.find(y):uf.union(x, y)cost += wif len(set(uf.find(i) for i in range(1, n + 1))) == 1:print(cost)
else:print(-1)
  • Java
import java.util.*;class UnionFind {int[] parent;int[] rank;public UnionFind(int n) {parent = new int[n + 1];rank = new int[n + 1];for (int i = 0; i <= n; i++) {parent[i] = i;}}public int find(int x) {if (parent[x] != x) {parent[x] = find(parent[x]);}return parent[x];}public void union(int x, int y) {int px = find(x);int py = find(y);if (px == py) {return;}if (rank[px] < rank[py]) {parent[px] = py;} else if (rank[px] > rank[py]) {parent[py] = px;} else {parent[py] = px;rank[px]++;}}
}public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();UnionFind uf = new UnionFind(n);List<int[]> edges = new ArrayList<>();for (int i = 0; i < m; i++) {int x = sc.nextInt();int y = sc.nextInt();int w = sc.nextInt();int p = sc.nextInt();if (p == 1) {uf.union(x, y);} else {edges.add(new int[]{w, x, y});}}edges.sort((a, b) -> a[0] - b[0]);int cost = 0;for (int[] edge : edges) {int w = edge[0];int x = edge[1];int y = edge[2];if (uf.find(x) != uf.find(y)) {uf.union(x, y);cost += w;}}Set<Integer> roots = new HashSet<>();for (int i = 1; i <= n; i++) {roots.add(uf.find(i));}if (roots.size() == 1) {System.out.println(cost);} else {System.out.println(-1);}}
}
  • Cpp
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;class UnionFind {
private:vector<int> parent;vector<int> rank;public:UnionFind(int n) {parent.resize(n + 1);rank.resize(n + 1, 0);for (int i = 0; i <= n; i++) {parent[i] = i;}}int find(int x) {if (parent[x] != x) {parent[x] = find(parent[x]);}return parent[x];}void merge(int x, int y) {int px = find(x);int py = find(y);if (px == py) {return;}if (rank[px] < rank[py]) {parent[px] = py;} else if (rank[px] > rank[py]) {parent[py] = px;} else {parent[py] = px;rank[px]++;}}
};int main() {int n, m;cin >> n >> m;UnionFind uf(n);vector<vector<int>> edges;for (int i = 0; i < m; i++) {int x, y, w, p;cin >> x >> y >> w >> p;if (p == 1) {uf.merge(x, y);} else {edges.push_back({w, x, y});}}sort(edges.begin(), edges.end());int cost = 0;for (auto edge : edges) {int w = edge[0];int x = edge[1];int y = edge[2];if (uf.find(x) != uf.find(y)) {uf.merge(x, y);cost += w;}}bool success = true;int root = uf.find(1);for (int i = 2; i <= n; i++) {if (uf.find(i) != root) {success = false;break;}}if (success) {cout << cost << endl;} else {cout << -1 << endl;}return 0;
}

相关文章:

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 5G基站光纤连接问题(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…...

分层Agent

分层Teams 分层Agent创建tool研究团队工具文档编写团队工具 通用能力定义Agent团队研究团队文档编写团队 添加图层 分层Agent 在前面的示例&#xff08;Agent管理&#xff09;中&#xff0c;我们引入了单个管理节点的概念&#xff0c;用于在不同工作节点之间路由工作。 但是&a…...

OS复习笔记ch11-1

外围设备的管理和磁盘调度 外围设备 从CPU的角度来看&#xff0c;外设有几个比较重要的I/O接口&#xff08;interfaces&#xff09; 状态reg&#xff1a;向CPU报告设备的状态&#xff08;忙碌/空闲&#xff09;命令reg&#xff1a;接收CPU命令&#xff0c;存储 CPU 需要执行的…...

Docker Compose 使用

一、简介 Docker Compose 是一个工具&#xff0c;用于定义和运行多容器 Docker 应用程序。它允许用户使用 YAML 文件来配置应用程序需要的所有服务&#xff0c;然后使用一个命令来从 YAML 文件配置中创建并启动所有服务。其主要目的是为了简化了多容器 Docker 应用程序的部署和…...

KEIL5.39 5.40 fromelf 不能生成HEX bug

使用AC6 编译,只要勾选了生成HEX。 结果报如下错误 暂时没有好的解决办法 1.替换法 2.在编译完后用命令生成HEX...

mongosh 和mongo 命令行连接MongoDB

Mongoshell MongoDB的Shell工具mongosh是一个全功能的JavaScript和Node.js的14.x REPL与MongoDB的部署交互环境。我们通过它可以直接对数据库进行查询和操作。这个工具是需要在安装玩MongoDB后单独安装的。 与传统的mongo方式连接MongoDB更加丰富。 官网 https://www.mongodb.…...

DOM 改变节点

DOM 改变节点 文档对象模型&#xff08;DOM&#xff09;是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化表示&#xff0c;并定义了一种方式&#xff0c;允许程序和脚本动态地访问和更新文档的内容、结构和样式。在网页开发中&#xff0c;DOM 操作是核心技能之一&#…...

【面试题分享】重现 string.h 库常用的函数

文章目录 【面试题分享】重现 string.h 库常用的函数一、字符串复制1. strcpy&#xff08;复制字符串直到遇到 null 终止符&#xff09;2. strncpy&#xff08;复制固定长度的字符串&#xff09; 二、字符串连接1. strcat&#xff08;将一个字符串连接到另一个字符串的末尾&…...

6.21 移动语义与智能指针

//先构造&#xff0c;再拷贝构造//利用"hello"这个字符串创建了一个临时对象//并复制给了s3//这一步实际上new了两次String s3 "hello"; 背景需求&#xff1a; 这个隐式创建的字符串出了该行就直接销毁掉&#xff0c;效率比较低 可以让_pstr指向这个空间…...

Kimi还能对学术论文进行润色?我来教你!

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 一、引言 在学术界&#xff0c;论文的质量往往决定了研究的可信度和影响力。Kimi作为一款人工智能助手&#xff0c;可以为学术论文的润色提供有效的帮助。本文将详细介绍如何利用Kimi进…...

智汇云舟成为中煤集团中煤智能创新联盟成员单位

6月21日&#xff0c;第八届世界智能产业博览会平行会议暨中煤智能创新联盟交流会在天津水游城丽筠酒店顺利举行。智汇云舟受邀参与&#xff0c;并由中国中煤能源集团授予荣誉证书&#xff0c;正式成为中煤智能创新联盟成员单位。会议上&#xff0c;清华大学、中国矿业大学&…...

【文心智能体大赛】迎接属于你的休闲娱乐导师!

迎接属于你的休闲娱乐导师&#xff01; 前言创建智能体发布智能体最后结语 前言 文心智能体平台AgentBuilder 是百度推出的基于文心大模型的智能体&#xff08;Agent&#xff09;平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的开发方式&…...

AI:音乐创作的未来还是毁灭的序曲?

AI&#xff1a;音乐创作的未来还是毁灭的序曲&#xff1f; 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;它已经渗透到了我们生活的方方面面&#xff0c;包括音乐领域。然而&#xff0c;AI在音乐创作中的角色引发了广泛的讨论和争议。一些人认为AI为音乐…...

如何通过AI进行智能日志异常检测

智能日志异常检测是一种利用人工智能&#xff08;AI&#xff09;技术来自动识别日志数据中异常模式或行为的方法。传统日志监控依赖于预定义规则&#xff0c;而智能日志异常检测可以适应不同的日志模式和异常类型&#xff0c;提高检测准确性和效率。下面是一个完整的步骤指南&a…...

C++ GPU编程(英伟达CUDA)

安装编译环境 https://developer.download.nvidia.com/compute/cuda/12.5.0/local_installers/cuda_12.5.0_555.85_windows.exe CMakeLists.txt cmake_minimum_required(VERSION 3.10)set(CMAKE_CXX_STANDARD 17) set(CMAKE_BUILD_TYPE Release) #set(CMAKE_CUDA_ARCHITECTUR…...

肾虚学习实验第T1周:实现mnist手写数字识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 作为一名研究牲&#xff0…...

Python | Leetcode Python题解之第162题寻找峰值

题目&#xff1a; 题解&#xff1a; class Solution:def findPeakElement(self, nums: List[int]) -> int:n len(nums)# 辅助函数&#xff0c;输入下标 i&#xff0c;返回 nums[i] 的值# 方便处理 nums[-1] 以及 nums[n] 的边界情况def get(i: int) -> int:if i -1 or…...

定个小目标之刷LeetCode热题(26)

这道题属于一道简单题&#xff0c;可以使用辅助栈法&#xff0c;代码如下所示 class Solution {public boolean isValid(String s) {if (s.isEmpty())return false;// 创建字符栈Stack<Character> stack new Stack<Character>();// 遍历字符串数组for (char c : …...

网络爬虫设置代理服务器

目录 1&#xff0e;获取代理 IP 2&#xff0e;设置代理 IP 3. 检测代理 IP 的有效性 4. 处理异常 如果希望在网络爬虫程序中使用代理服务器&#xff0c;就需要为网络爬虫程序设置代理服务器。 设置代理服务器一般分为获取代理 IP 、设置代理 IP 两步。接下来&#xff0c;分…...

3、matlab单目相机标定原理、流程及实验

1、单目相机标定流程及步骤 单目相机标定是通过确定相机的内部和外部参数&#xff0c;以便准确地在图像空间和物体空间之间建立映射关系。下面是单目相机标定的流程及步骤&#xff1a; 搜集标定图像&#xff1a;使用不同角度、距离和姿态拍摄一组标定图像&#xff0c;并确保标…...

AI的“血管”:从大模型需求看6G、高速光纤与智算中心网络的技术变革

大模型训练与推理的爆发&#xff0c;正以前所未有的力度重塑通信网络基础设施。6G、高速光纤、智算中心网络&#xff0c;正成为AI基础设施的“血管”&#xff0c;承载着算力的血液&#xff0c;决定智能的极限。当GPT-5.4的推理能力逼近人类专家&#xff0c;当Sora可以生成一分钟…...

告别‘阴阳屏’:深入MTK平台PQ底层,教你用代码实现多供应商屏幕色彩统一

MTK平台屏幕色彩统一实战&#xff1a;从Gamma参数调试到自动化加载 当你的项目同时采用三家不同供应商的屏幕模组时&#xff0c;用户滑动屏幕时可能看到三种截然不同的白色——这种"阴阳屏"现象在硬件采购多元化的今天越来越普遍。作为深耕显示领域多年的工程师&…...

Python实战:从零构建基于腾讯混元大模型的智能客服系统

1. 为什么选择腾讯混元大模型做智能客服 最近两年大模型技术突飞猛进&#xff0c;但真正要把大模型落地到实际业务中&#xff0c;很多开发者都会遇到三个头疼的问题&#xff1a;第一是模型效果不稳定&#xff0c;第二是API调用复杂&#xff0c;第三是业务逻辑难集成。我在帮几…...

Llama-3.2V-11B-cot惊艳案例:电影截图角色关系推演与剧情发展预测展示

Llama-3.2V-11B-cot惊艳案例&#xff1a;电影截图角色关系推演与剧情发展预测展示 1. 视觉推理工具简介 Llama-3.2V-11B-cot是基于Meta多模态大模型开发的高性能视觉推理工具&#xff0c;专为双卡4090环境深度优化。该工具不仅修复了视觉权重加载的关键问题&#xff0c;还支持…...

douyin-downloader:智能抖音视频全流程管理工具,让内容收集效率提升90%

douyin-downloader&#xff1a;智能抖音视频全流程管理工具&#xff0c;让内容收集效率提升90% 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader douyin-downloader是一款开源的抖音视频批量下载与管理工具&am…...

MATLAB实战:手把手教你实现FM调制解调(附完整代码与避坑指南)

MATLAB实战&#xff1a;从零构建FM通信系统的完整指南 在无线通信领域&#xff0c;频率调制(FM)技术因其出色的抗噪声性能&#xff0c;至今仍广泛应用于广播、对讲机等场景。对于通信工程学生和MATLAB初学者而言&#xff0c;亲手实现一个完整的FM调制解调系统&#xff0c;是理解…...

80+经典游戏宽屏焕新:WidescreenFixesPack重塑怀旧体验

80经典游戏宽屏焕新&#xff1a;WidescreenFixesPack重塑怀旧体验 【免费下载链接】WidescreenFixesPack Plugins to make or improve widescreen resolutions support in games, add more features and fix bugs. 项目地址: https://gitcode.com/gh_mirrors/wi/WidescreenFi…...

最完整的大模型算法工程师技术栈图谱(2026版)

目录 一、基础能力&#xff08;所有AI工程师的底座&#xff09; 1 编程语言 2 数据结构与算法 3 数学基础 二、深度学习基础 深度学习模型基础 三、大模型核心技术 1 Transformer架构 2 预训练 3 Tokenizer 四、大模型训练体系 1 分布式训练 2 训练优化技术 3 微…...

当欧姆龙NX1P2遇上丰田PC10G:一次EIP实例ID通信的“踩坑”与“填坑”实录

当欧姆龙NX1P2遇上丰田PC10G&#xff1a;EIP实例ID通信的实战解析 在工业自动化领域&#xff0c;不同品牌设备间的通信集成往往充满挑战。最近一次非标设备联调项目中&#xff0c;我们遇到了欧姆龙NX1P2控制器与丰田PC10G设备通过EtherNet/IP&#xff08;EIP&#xff09;协议通…...

MATLAB 数值计算辅助:分析 Stable Yogi 生成图像的色彩与纹理特征

MATLAB 数值计算辅助&#xff1a;分析 Stable Yogi 生成图像的色彩与纹理特征 1. 引言 最近在尝试用 Stable Yogi 生成一些皮革纹理的设计图&#xff0c;效果确实挺惊艳的。但生成得多了&#xff0c;就遇到一个新问题&#xff1a;我手头攒了几百张图&#xff0c;风格各异&…...