两个城市间路径的最小分数

news/2025/3/21 0:05:15/文章来源:https://www.cnblogs.com/Xhita/p/18784256

题目链接

题目概述

给定一个包含 n 个城市的图(可能不连通),以及若干双向道路及其距离。定义路径的分数为路径中道路的最小距离,求从城市 1 到城市 n 的所有路径中,分数的最小值。

思路分析

关键点:对于任何路径,其分数由路径中的最小边决定。因此,全局最小分数即为连接城市 1n 的连通分量中所有边的最小值。无论路径如何绕,只要包含这条最小边,分数即为该边值。故问题转化为寻找该连通分量的最小边。

解法步骤

  1. 预处理邻接边最小值:记录每个节点所有邻接边中的最小值。
  2. 并查集确定连通分量:合并连通的城市,找到包含 1n 的连通分量。
  3. 遍历连通分量:收集该分量中所有节点的最小邻接边,取全局最小值。

代码解析

class Solution {
public:int minScore(int n, vector<vector<int>>& roads) {unordered_map<int,int>cb;int m=roads.size(),re=1e6;for(auto x:roads){if(cb[x[0]]!=0)cb[x[0]]=min(cb[x[0]],x[2]);else cb[x[0]]=x[2];if(cb[x[1]]!=0)cb[x[1]]=min(cb[x[1]],x[2]);else cb[x[1]]=x[2];}vector<int>p(n+1);for(int i=1;i<=n;i++)p[i]=i;auto fin=[&](auto &&fin,int a){if(p[a]==a)return a;else return p[a]=fin(fin,p[a]);};for(int i=0;i<m;i++){int x=fin(fin,roads[i][0]);int y=fin(fin,roads[i][1]);if(x!=y){p[x]=y;}}for(int i=1;i<=n;i++)fin(fin,i);int tk=fin(fin,n);for(int i=1;i<=n;i++){if(p[i]==tk){re=min(re,cb[i]);}}return re;}
};

代码细节说明

  1. 预处理邻接边最小值:遍历所有道路,更新每个节点 uv 的最小邻接边到 cb 中。
  2. 并查集操作
    • 初始化:每个节点的父节点初始为自身。
    • 合并操作:将每条道路的两端点合并,确保连通性。
  3. 确定连通分量:通过查找 n 的根节点 tk,确定目标连通分量。
  4. 收集最小值:遍历所有节点,若属于该连通分量,则用其邻接边最小值更新最终结果。

复杂度分析

  • 时间复杂度:并查集操作近似 \(O(m \alpha(n))\)(线性),预处理和遍历均为 \(O(m + n)\),整体 \(O(m + n)\)
  • 空间复杂度\(O(n + m)\),存储并查集父数组和邻接边信息。

结尾

我想出去玩!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902279.html

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

相关文章

GKI改造原则、机制和方法

Google在android11-5.4分支上开始要求所有下游厂商使用Generic Kernel Image(GKI),需要将SoC和device相关的代码从核心内核剥离到可加载模块中(下文称之为GKI改造),从而解决内核碎片化问题。GKI为内核模块提供了稳定的内核模块接口(KMI),模块和内核可以独立更新。本文…

鸿蒙特效教程07-九宫格幸运抽奖

鸿蒙特效教程07-九宫格幸运抽奖在移动应用中,抽奖功能是一种常见且受欢迎的交互方式,能够有效提升用户粘性。本教程将带领大家从零开始,逐步实现一个九宫格抽奖效果,适合HarmonyOS开发的初学者阅读。最终效果预览 我们将实现一个经典的九宫格抽奖界面,包含以下核心功能:3…

Ollama系列05:Ollama API 使用指南

本文是Ollama系列教程的第5篇,在前面的4篇内容中,给大家分享了如何再本地通过Ollama运行DeepSeek等大模型,演示了chatbox、CherryStudio等UI界面中集成Ollama的服务,并介绍了如何通过cherryStudio构建私有知识库。 在今天的分享中,我将分享如何通过API来调用ollama服务,通…

前端HTML+CSS+JS速成笔记

HTML 超文本标记语言。 单标签与双标签的区别 单标签用于没有内容的元素,双标签用于有内容的元素。 HTML文件结构 告诉浏览器这还是一个 Html 文件: <!DOCTYPE html>Html文件的范围: <html>...</html>Html 文件的头: <head>...</head>实际显…

12. ADC

一、ADC简介生活中接触到的大多数信息是醉着时间连续变化的物理量,如声音、温度、压力等。表达这些信息的电信号,称为 模拟信号(Analog Signal)。为了方便存储、处理,在计算机系统中,都是数字 0 和 1 信号,将模拟信号(连续信号)转换为数字信号(离散信号)的器件就叫模…

【刷题笔记】力扣 40. 组合总和 II——回溯算法中的去重

40. 组合总和 II 中等 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 输入: candidates = [10,1,2,7,6,1,…

Spring AI 搭建AI原生应用 [clone]

作者 | 文心智能体平台导读 本文以快速开发一个 AI 原生应用为目的,介绍了 Spring AI 的包括对话模型、提示词模板、Function Calling、结构化输出、图片生成、向量化、向量数据库等全部核心功能,并介绍了检索增强生成的技术。依赖 Spring AI 提供的功能,我们可以轻松开发出…

mybatis逆向工程插件配置(mybatis-generator-maven-plugin)

MyBatis逆向工程是一种自动化工具,可以将数据库表结构转换为MyBatis的Mapper XML文件和相应的Java接口和对应的实体类。 1.生成maven项目 2.pom.xml文件中导入逆向工程插件相关配置<!--mybatis逆向工程--><build><plugins><!--其中的一个插件,逆向工程插…

Day01-Java项目学习

Day01 后端环境搭建 lombok插件 通过lombok插件。@Data 可以使用@Data、@Getter、@Setter等注解的形式,来对一个Java Bean(具有Getter,Setter方法的对象)实现快速的初始化。 @Slf4j 可以以注解的形式,自动化日志变量,通过添加@Slf4j(simple logging Facade for Java)生成…

20241105 实验一 《Python程序设计》

课程:《Python程序设计》 班级: 2411 姓名: 王梓墨 学号:20241105 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 一.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试分析) 3.编写程序,练习变量和类型、字…

英语四级备考第二天

第二天 今天是开始英语备考的第二天,当迈出第二步的时候,就意味着正走在通过考试的路上。到时当你以425分毋庸置疑地通过考试时,过去的90天都不曾虚度。 单词 今天新学的单词加上昨天应复习的单词,在50~60个之间。阅读 今天的阅读还是用扇贝单词推荐的包含学习的单词的文章…