力扣每日一题:Dijkstra1976.到达目的地的方案数

本题是在非负权值图中求解最短路径,典型的Dijkstra算法的应用,只不过在求解最短路径时,还需要记录最短路径数目。这个又涉及到一点动态规划的思想。
考虑一个点u,原点到u的最短路径为dis[u],最短路径数目为ways[u],那么对于u的连通点v,又u到v的权值k,然后原点到v的最短路径是dis[v],最短路径数目为ways[v]。
那么从u到v,有如下递推公式

  1. 当dis[v] > dis[u]+k时,应当更新dis[v] = dis[u]+k。并且ways[v] = ways[u]
  2. 当dis[v] = dis[u]+k时,不需要更新,ways[v] += ways[u]
  3. 当dis[v]较小时,不需要操作

本题代码如下

class Solution {
public:using LL =long long;class cmp{public:bool operator()(const pair<int,LL>& a,const pair<int, LL>& b){return a.second > b.second;}};int countPaths(int n, vector<vector<int>>& roads) {const LL mod = 1e9+7;//建图vector<vector<pair<int,LL>>> graph(n);for(auto& road : roads){graph[road[0]].push_back({road[1],road[2]});graph[road[1]].push_back({road[0],road[2]});}//结果数组vector<LL> dis(n,LLONG_MAX);dis[0] = 0;vector<LL> ways(n,1);vector<int> visited(n);//优先队列priority_queue<pair<int,LL>,vector<pair<int,LL>>,cmp> q;q.push({0,0});while(!q.empty()){pair<int,LL> temp = q.top();q.pop();int cur = temp.first;int curdis = temp.second;//如果当前权值 大于已记录的值 跳过if(curdis > dis[cur]) continue;//如果cur被访问过跳过if(visited[cur]) continue;visited[cur] = 1;for(auto& y : graph[cur]){//连通点int next = y.first;LL n_dis = y.second;if(dis[next] > dis[cur] + n_dis){dis[next] = dis[cur] + n_dis;ways[next] = ways[cur];q.push({next,dis[next]});}else if(dis[next] == dis[cur]+n_dis){ways[next] = (ways[next] + ways[cur]) % mod;}}}return ways[n-1];}
};

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

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

相关文章

算法D30 | 回溯算法6 | 332.重新安排行程 51. N皇后 37. 解数独

详细布置 今天这三道题都非常难&#xff0c;那么这么难的题&#xff0c;为啥一天做三道&#xff1f; 因为 一刷 也不求大家能把这么难的问题解决&#xff0c;所以 大家一刷的时候&#xff0c;就了解一下题目的要求&#xff0c;了解一下解题思路&#xff0c;不求能直接写出代码…

数据结构之顺序表及其实现!

目录 ​编辑 1. 顺序表的概念及结构 2. 接口的实现 2.1 顺序表的初始化 2.2 检查顺序表容量是否已满 2.3 顺序表的尾插 ​编辑 2.4 顺序表的尾删 2.5 顺序表的头插 2.6 顺序表的头删 2.7 顺序表在pos位置插入 2.8 顺序表在pos位置删除 2.9 顺序表的查找 2.10 顺…

探秘RestTemplate:解析远程调用的神奇力量(二)

本系列文章简介&#xff1a; 本系列文章将深入探讨RestTemplate的原理及其应用。我们将从RestTemplate的工作原理开始&#xff0c;解析其内部机制和工作流程。然后&#xff0c;我们将介绍RestTemplate的核心功能和特点&#xff0c;以及它在不同场景下的应用。我们还将为您提供一…

数据分析Pandas专栏---第十三章<Pandas训练题(初)>

前言: 写这篇是为了弄一个富有挑战性的Pandas练习题库&#xff0c;涵盖了许多常见和实用的数据处理问题。通过解决这些练习&#xff0c;能够深入了解Pandas提供的关键功能&#xff0c;掌握有效处理数据的技巧和方法。 练习题库涵盖了选择特定列并创建新DataFrame、对DataFrame进…

考研数学——高数:多元函数微分法及其应用

因为复习阶段全篇很细节的写下来一来比较费时间&#xff0c;二容易导致为了记笔记而记。 接下来的内容只会保留上课中比较有意义的地方&#xff0c;以及有自己助于理解的想法 全微分 助记&#xff1a; 证明是否可微&#xff0c;首先判断两个偏导数是否存在&#xff0c;不存在则…

中文版国产Figma简单好上手

在过去的两年里&#xff0c;国内外协同办公室发展迅速。一方面&#xff0c;它是由突如其来的疫情推动的&#xff0c;另一方面&#xff0c;它是科学技术不断进步的必然结果。在市场的推动下&#xff0c;市场上出现了越来越多的协同办公软件&#xff0c;使工作场所的工作更加高效…

插入排序和归并排序

插入排序&#xff0c;Insertion Sort. 给出伪代码 for i 1,2,...,n-1Insert A[i] into Sorted array A[0:i-1]by swaping down to the correct position. 冒泡排序 冒泡排序就是一种插入排序算法。 i ← 1 while i < length(A)j ← iwhile j > 0 and A[j-1] > A…

POST和GET传值的方法

区别&#xff1a; 1. Get是从服务器上获取数据&#xff0c;Post是向服务器传送数据。 2. Get是把参数数据队列加到提交表单的action属性所指的url中 值和表单内各个字段一一对应&#xff0c;在url中可以看到。Post是通过http中的 Post机制&#xff0c;将表单内各个字段与其内…

CorelDRAW2024专业级图形设计矢量图形设计软件

CorelDRAW2024是一款功能强大的矢量图形设计软件&#xff0c;适用于专业级图形设计作品的设计师和创作者。它提供了智能对象、布局、插图和模板等功能&#xff0c;可以帮助用户快速创建高质量的设计作品。 这款软件的用户界面直观且易于使用&#xff0c;允许用户快速访问和管理…

[渗透教程]-024-Hashcat密码破解

Hashcat 简介 Hashcat 自称是世界上最快的密码恢复工具。它在2015年之前拥有专有代码库,但现在作为免费软件发布。适用于 Linux,OS X 和 Windows 的版本可以使用基于 CPU 或基于 GPU 的变体。支持 hashcat 的散列算法有 Microsoft LM hash,MD4,MD5,SHA 系列,Unix 加密格…

Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin:x.x.x报错

Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin:x.x.x报错 环境 springboot 2.6.3 IDEA 2021.2.3 解决办法 清除IDEA缓存并重启给spring-boot-maven-plugin指定版本号后重新索引再删除版本号

184基于matlab的相关向量机(RVM)回归和分类算法

基于matlab的相关向量机&#xff08;RVM&#xff09;回归和分类算法。该算法基于贝叶斯稀疏核⽅法&#xff0c;避免了支持向量机&#xff08;SVM&#xff09;的主要局限性。RVM关键是为每个权参数 都引入一个单独的超参数 &#xff0c;而不是一个共享超参数。程序已调通&#x…

力扣hot100:42.接雨水(双指针/动态规划/贪心)

什么时候能用双指针&#xff1f; &#xff08;1&#xff09;对撞指针&#xff1a; ①两数和问题中可以使用双指针&#xff0c;先将两数和升序排序&#xff0c;可以发现规律&#xff0c;如果当前两数和大于target&#xff0c;则右指针向左走。 ②接雨水问题中&#xff0c;左边最…

【Web】浅聊JDBC的SPI机制是怎么实现的——DriverManager

目录 前言 分析 前言 【Web】浅浅地聊JDBC java.sql.Driver的SPI后门-CSDN博客 上篇文章我们做到了知其然&#xff0c;知道了JDBC有SPI机制&#xff0c;并且可以利用其Driver后门 这篇文章希望可以做到知其所以然&#xff0c;对JDBC的SPI机制的来源做到心里有数 分析 先是…

Python 弱引用全解析:深入探讨对象引用机制!

目录 前言 弱引用的概述 弱引用的原理 使用 WeakRef 类创建弱引用 使用 WeakValueDictionary 类创建弱引用字典 实际应用场景 1. 解决循环引用问题 2. 对象缓存 总结 前言 在Python编程中&#xff0c;弱引用&#xff08;Weak Reference&#xff09;是一种特殊的引用方式…

(文末送书)《低代码平台开发实践:基于React》

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&am…

古人如何求开方

古代开方&#xff0c;即古代数学中的解方程问题&#xff0c;主要涉及的是一元二次方程的求解。古代中国、希腊、印度等文明都对此有所研究。 在中国&#xff0c;古代数学家对开方的研究可以追溯到《九章算术》这本书。《九章算术》是中国古代一部重要的数学著作&#xff0c;大约…

CPU尖峰导致电脑卡顿问题记录

困扰了近一个月的问题终于解决了。 问题描述 最近电脑出现CPU尖峰&#xff0c;不知道怎么回事。每隔约10秒CPU就会出现尖峰&#xff0c;出现尖峰的时候&#xff0c;看视频时视频会出现明显卡顿&#xff0c;看网页UI时网页也会卡顿&#xff0c;上下翻滚页面时页面会出现卡顿&a…

PCM会重塑汽车OTA格局吗(2)

目录 1.概述 2. PCM技术视角下的OTA 3.小结 1.概述 上一篇文章&#xff0c;我们着重讲解了OTA的概述内容&#xff0c;和意法半导体推出的跨域融合MCU的四大特征&#xff0c;其中就包含了OTA技术。 他们针对OTA做了比较创新的设计&#xff0c;在总的可用memory容量不变情况…

2024最新Android开发面试解答,学海无涯

一个程序员&#xff0c;如果不想35 岁被淘汰&#xff0c;请把它当成一种信仰&#xff01; 25岁&#xff0c;一个北漂程序员&#xff0c;入职三年&#xff0c;Android中级工程师&#xff0c;月薪15k&#xff0c;965的工作经常干成996&#xff0c;比起老家的同龄人&#xff0c;我…