力扣题解(新增道路查询后的最短距离II)

news/2024/11/21 22:50:02/

3244. 新增道路查询后的最短距离 II

给你一个整数 n 和一个二维整数数组 queries

有 n 个城市,编号从 0 到 n - 1。初始时,每个城市 i 都有一条单向道路通往城市 i + 1( 0 <= i < n - 1)。

queries[i] = [ui, vi] 表示新建一条从城市 ui 到城市 vi 的单向道路。每次查询后,你需要找到从城市 0 到城市 n - 1 的最短路径长度

所有查询中不会存在两个查询都满足 queries[i][0] < queries[j][0] < queries[i][1] < queries[j][1]

返回一个数组 answer,对于范围 [0, queries.length - 1] 中的每个 ianswer[i] 是处理完 i + 1 个查询后,从城市 0 到城市 n - 1 的最短路径的长度

思路:

开始考虑的是二分搜索,因为觉得既然有l到r的边,那么就不用考虑l到(l+1,,,,r-1)之间的

边了,但是这里会发现无法判定当没有从l到(l+r)/2的边时候该怎么走,因为虽然题目要求不能有相交的边,但是可以有从一个边为左端点,然后右端点不同的情况。最终发现利用二分无法很好的解决这个问题。

本题考虑的是并查集的思路,将关注的重点放在边上,起初的时候每个节点i,f[i]+1表示其所能指向的最远的边,然后考虑的是从0到n-1一共有多少条边就行,每当遇到一个从l到r的边,就把从l+1开始到r-2的点都合并到r上,(r-1因为本来就有到r的边所以不用合并),每次合并都使得边的数目减少一,所以只需要记录一下边减少的数目,在和边原本的数目相减就是加上一条边以后最短距离了。

class Solution {
public: vector<int>f;vector<int> shortestDistanceAfterQueries(int n, vector<vector<int>>& queries) {f.resize(n);for(int i=0;i<n;i++)f[i]=i;vector<int>ans;int cnt=n-1;for(auto e:queries){int x=e[0],y=e[1]-1;int r=find(y);for(int i=find(x);i<y;i=find(i+1)){f[i]=r;cnt--;}ans.push_back(cnt);}return ans;}int find(int x){if(x!=f[x])f[x]=find(f[x]);return f[x];}
};


http://www.ppmy.cn/news/1548873.html

相关文章

基于Java的旅游类小程序开发与优化

基于Java的旅游类小程序开发与优化 第一章 绪论 1.1 研究背景及意义 随着移动互联网的迅猛发展&#xff0c;消费者对旅游信息获取的便捷性、个性化需求日益增长。旅游类小程序以其即点即用的便捷性和丰富的功能&#xff0c;逐渐成为满足用户旅游需求的重要工具。本研究旨在探…

CSS 样式的优先级?

在CSS中&#xff0c;样式的优先级决定了当多个样式规则应用于同一个元素时&#xff0c;哪个样式会被最终使用。以下是一些决定CSS样式优先级的规则&#xff1a; 就近原则&#xff1a; 最后应用在元素上的样式具有最高优先级。这意味着如果两个选择器都应用了相同的样式&#xf…

数据结构_图的遍历

深度优先搜索遍历 遍历思想 邻接矩阵上的遍历算法 void Map::DFSTraverse() {int i, v;for (i 0; i < MaxLen; i){visited[i] false;}for (i 0; i < Vexnum; i){// 如果顶点未访问&#xff0c;则进行深度优先搜索if (visited[i] false){DFS(i);}}cout << endl…

【10分钟学习Vue自定义指令开发】鼠标放置提示指令

描述 自定义指令 v-tooltip mounted(el, binding)&#xff1a;当元素被挂载到DOM上时&#xff0c;这个钩子会被调用。 el 是指令绑定的元素&#xff0c;binding 包含了指令的值&#xff0c;即 binding.value&#xff0c;这里是 clickOutside 字符串。tooltip 变量用于存储创建…

【案例】---Hutool提取excel文档

目录 一、前言二、提取excel文档2.1、核心代码一、前言 引用jar包 <!--hutool--><dependency><groupId>cn.hutool</groupId>

蓝桥杯每日真题 - 第19天

题目&#xff1a;&#xff08;费用报销&#xff09; 题目描述&#xff08;13届 C&C B组F题&#xff09; 解题思路&#xff1a; 1. 问题抽象 本问题可以看作一个限制条件较多的优化问题&#xff0c;核心是如何在金额和时间约束下选择最优方案&#xff1a; 动态规划是理想…

【ChatGPT】实现贪吃蛇游戏

贪吃蛇游戏中。以下是实现赛博朋克风格背景的几种方法&#xff1a; 使用CSS渐变创建赛博朋克风格背景使用赛博朋克风格的背景图像集成到现有的游戏代码中 方法1&#xff1a;使用CSS渐变创建赛博朋克风格背景 您可以使用CSS的线性渐变来创建一个赛博朋克风格的背景。以下是一…

LabVIEW实现线性拟合的方法

在数据处理中&#xff0c;线性拟合是一种常用的方法&#xff0c;用于找到两组数据之间的最佳线性关系。本文将以电压&#xff08;XX&#xff09;和压力&#xff08;YY&#xff09;的关系为例&#xff0c;介绍如何使用LabVIEW进行线性拟合&#xff0c;并输出拟合结果。 一、问题…