Leetcode 1514. 概率最大的路径

1.题目基本信息

1.1.题目描述

给你一个由 n 个节点(下标从 0 开始)组成的无向加权图,该图由一个描述边的列表组成,其中 edges[i] = [a, b] 表示连接节点 a 和 b 的一条无向边,且该边遍历成功的概率为 succProb[i] 。

指定两个节点分别作为起点 start 和终点 end ,请你找出从起点到终点成功概率最大的路径,并返回其成功概率。

如果不存在从 start 到 end 的路径,请 返回 0 。只要答案与标准答案的误差不超过 1e-5 ,就会被视作正确答案。

1.2.题目地址

https://leetcode.cn/problems/path-with-maximum-probability/description/

2.解题方法

2.1.解题思路

Dijkstra算法+优先队列优化

2.2.解题步骤

第一步,构建邻接表

第二步,通过Dijkstra算法算出单源最长路径,将路径相加变成路径相乘

第三步,返回end_node的但源最长路径

3.解题代码

Python代码

from typing import List
import heapq
inf=float("inf")
# dijkstra最大路径模板
def dijkstraMaxDist(graph:List[List[List]],startNode:int):length=len(graph)dists=[0]*length  # *各个节点到startNode的最大概率dists[startNode]=1  # *初始化startNode到startNode的最大概率pathsPrevs=[-1]*length      # 最短路径的最后节点的前驱节点distsHeap=[[-1,startNode]]   # *距离优先队列,项的结构为[距离startNode的距离,node],需要构建最大堆,将权值取负while distsHeap:dist,node=heapq.heappop(distsHeap)dist=-distif dist<dists[node]:    # *排除同一个continuefor edgeWeight,subNode in graph[node]:thisDist=edgeWeight*dists[node]if thisDist>dists[subNode]: # *dists[subNode]=thisDistpathsPrevs[subNode]=nodeheapq.heappush(distsHeap,[-thisDist,subNode])    # *return dists,pathsPrevsclass Solution:def maxProbability(self, n: int, edges: List[List[int]], succProb: List[float], start_node: int, end_node: int) -> float:# 第一步,构建邻接表graph=[[] for i in range(n)]for i,edge in enumerate(edges):graph[edge[0]].append([succProb[i],edge[1]])graph[edge[1]].append([succProb[i],edge[0]])# 第二步,通过Dijkstra算法算出单源最长路径,将路径相加变成路径相乘probs,pathsPrevs=dijkstraMaxDist(graph,start_node)# print(probs,pathsPrevs)# 第三步,返回end_node的但源最长路径return probs[end_node]

C++代码

class Solution {
public:vector<double> dijkstraMaxDist(vector<vector<pair<double,int>>>& graph,int startNode){int length=graph.size();vector<double> dists(length,0);dists[startNode]=1;// vector<int> pathsPrevs(length,-1);priority_queue<pair<double,int>> distsHeap;distsHeap.emplace(1,startNode);while(!distsHeap.empty()){auto item=distsHeap.top();double dist=item.first;int node=item.second;distsHeap.pop();if(dist<dists[node]){continue;}for(int i=0;i<graph[node].size();++i){auto item1=graph[node][i];double edgeWeight=item1.first;int subNode=item1.second;double thisDist=edgeWeight*dists[node];if(thisDist>dists[subNode]){dists[subNode]=thisDist;// pathsPrevs[subNode]=node;distsHeap.emplace(thisDist,subNode);}}}return dists;}double maxProbability(int n, vector<vector<int>>& edges, vector<double>& succProb, int start_node, int end_node) {vector<vector<pair<double,int>>> graph(n);for(int i=0;i<edges.size();++i){auto& edge = edges[i];graph[edge[0]].emplace_back(succProb[i],edge[1]);graph[edge[1]].emplace_back(succProb[i],edge[0]);}// for(auto i:graph){//     for(auto j:i){//         cout << j.first << " " << j.second << endl;//     }//     cout << endl;// }vector<double> probs=dijkstraMaxDist(graph,start_node);return probs[end_node];}
};

4.执行结果

在这里插入图片描述

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

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

相关文章

【3dgs】Gaussian-SLAM发展关键历程梳理

【3dgs】Gaussian-SLAM 0. 写在前面1. 3D Splatting与SLAM流程2. Splatting SLAM&#xff1a;单目/RGB-D(2024年新作&#xff09;2.1 相机跟踪精度2.2 新视图渲染性能2.3 消融实验 3. Gaussian-SLAM&#xff08;Photo-SLAM&#xff09; Photo-SLAM技术原理详解 ORBSLAM3dGS&am…

OKG Research:如何衡量链上数据的开放价值?

在新加坡Token2049期间&#xff0c;欧科云链研究院受邀参加Bloomberg主办的企业另类资产投资峰会2024&#xff0c;与多位专家围绕未来数据形态与前景进行了深入交流。 活动后&#xff0c;欧科云链研究院负责人Lola Wang与资深研究员Jason Jiang在大公网发表署名文章《如何衡量…

faust,一个神奇的 Python 库!

大家好&#xff0c;今天为大家分享一个神奇的 Python 库 - faust。 Github地址&#xff1a;https://github.com/robinhood/faust 在分布式系统和实时数据处理的世界里&#xff0c;消息流处理&#xff08;Stream Processing&#xff09;变得越来越重要。Faust 是一个 Python 库…

【工具变量】上市公司企业广告支出数据(2007-2023年)

一、测算方式&#xff1a;具体而言&#xff0c;参照 Lu 等&#xff08;2022&#xff09;的研究&#xff0c;本文通过上市公司财务报表附注获取每家上市公司每年销售费用明细项目&#xff0c;筛选出广告费、广告宣传费、广告推广费、广告策划费、广告展览费等与广告支出相关的项…

Python入门笔记(二)

文章目录 第六章 列表list6.1 创建列表&#xff1a;[]、list()、列表生成式6.2 索引访问元素、元素返回索引index()6.3 列表增加元素:append()、extend()、insert()6.4 列表删除元素&#xff1a;remove()、del()、pop()、clear()6.5 列表修改元素6.6 排序&#xff1a;.sort()、…

防火墙的三种工作模式:路由模式、透明模式(网桥)、混合模式

防火墙作为网络安全的核心设备之一&#xff0c;扮演着至关重要的角色。它不仅能够有效防御外部网络的攻击&#xff0c;还能保护内部网络的安全。在如今复杂多样的网络环境下&#xff0c;防火墙的部署和工作模式直接影响着网络安全策略的实施效果。防火墙通常可以工作在三种模式…

自定义函数查看OS的file cache

简介 在OS中使用cache机制&#xff0c;主要为了提高磁盘的读取效率&#xff0c;避免高频的IO交换。将频繁访问的数据存放在file cache中&#xff0c;下一次在获取的时候就可以直接读取&#xff0c;缓存高命中率对于数据高速检索十分有利。 smem smem 是一个可以显示 Linux 系…

【即见未来,为何不拜】聊聊分布式系统中的故障监测机制——Phi Accrual failure detector

前言 昨天在看tcp拥塞控制中的BBR(Bottleneck Bandwidth and Round-trip propagation time)算法时&#xff0c;发现了这一特点&#xff1a; 在BBR以前的拥塞控制算法中(如Reno、Cubic、Vegas)&#xff0c;都依赖于丢包事件的发生&#xff0c;在高并发时则会看到网络波动的现象…

uni-app使用v-show编译成微信小程序的问题

问题 在uni-app使用v-show语法编译成微信小程序会有一个问题 当我们设置成v-show"false" 在Hbuilder X里面确实没有显示 然后运行到 微信开发程序里面 发现显示了出来&#xff0c;说明设置的 v-show"false"没有起作用 解决办法 首先去uniapp官网查看v…

uniapp打包安卓apk步骤

然后安装在手机上就可以啦

火狐浏览器 Firefox v131.0.2 第三方tete009编译便携版

火狐浏览器是一款非常优秀的浏览器&#xff0c;它的兼容性和稳定性非常出色&#xff0c;备受全球用户的青睐。Firefox便携版是Firefox浏览器的一个特别版本&#xff0c;它可以在没有安装的情况下使用&#xff0c;非常方便。tete009 Firefox 编译版的启动和加载图片时间是所有火…

Ubuntu内存扩容

目录 vmware设置Ubuntu设置查看 读研后发现&#xff0c;Ubuntu的使用量直线上升&#xff0c;之前给配置了20g内存&#xff0c;安装了个ros后&#xff0c;没啥内存了。本文实现给Ubuntu扩容。 vmware设置 这里 我使用别人的截图来演示。 我在这里改成了60 Ubuntu设置 sudo a…

JS 分支语句

目录 1. 表达式与语句 1.1 表达式 1.2 语句 1.3 区别 2. 程序三大流控制语句 3. 分支语句 3.1 if 分支语句 3.2 双分支 if 语句 3.3 双分支语句案例 3.3.1 案例一 3.3.2 案例二 3.4 多分支语句 1. 表达式与语句 1.1 表达式 1.2 语句 1.3 区别 2. 程序三大流控制语…

每天花2分钟学数字化转型,第三讲:数智化

​对于智能化&#xff08;intelligence&#xff09;&#xff0c;我的理解是&#xff1a;你中有我&#xff0c;我中有你「人机一体」的世界。 阅读本文&#xff0c;你将快速知晓“智能化”的定义与价值&#xff0c;通过生活实例让你对智能化有一个全新的理解。 最后还会介绍“…

Keil中代码补全功能和自动缩进功能设置

一、自动缩进功能的设置&#xff0c;在按回车键换行或者按Tab键的时候是有缩进的&#xff0c;还可以进行缩进设置。可以通过以下步骤进行设置&#xff1a;①Edit&#xff08;编辑&#xff09;->②Configuration(配置)->③Tab size&#xff08;Tab缩进长度&#xff09;在T…

单机redis和mysql服务器的承载压力

单机环境下&#xff0c;Redis 和 MySQL 的承载压力主要取决于多种因素&#xff0c;如硬件配置、数据规模、查询模式、读写比例、以及优化程度等。以下是一些关键点&#xff1a; Redis 的承载压力 Redis 是基于内存的键值数据库&#xff0c;通常用于高速缓存和高频率读取场景…

在Linux中搭建WordPress并实现Windows主机远程访问

WordPreWordPress是一个基于PHP开发的开源平台&#xff0c;适用于在支持PHP与MySQL数据库的服务器上搭建个性化博客或网站。同时&#xff0c;它也能够作为功能强大的内容管理系统&#xff08;CMS&#xff09;被广泛应用。 虚拟机&#xff1a;VirtualBox 虚拟机安装&#x1f449…

ES-入门-http-多条件查询范围查询

must 表示多个条件需要同时满足 在postman 对应的参数配置如下 {"query": {"bool": {"must" : [{"match" :{"category":"小米"}},{"match":{"price":3999.00}}]}} } 如下图查询的结果是需…

Golang 代码质量检查工具 | golangci-lint

背景 开发团队代码&#xff0c;保持一个统一的风格和规范&#xff0c;有利于团队协作和交流。 对代码进行质量检查&#xff0c;能达到以下作用&#xff1a; 提高代码质量&#xff1a;代码质量检查可以帮助团队发现潜在的错误和问题&#xff0c;从而提高代码的稳定性和可靠性。…

Power BI:链接数据库与动态数据展示案例

一、案例背景 在数据驱动的时代&#xff0c;如何高效、直观地展示和分析数据成为了企业决策和个人洞察的关键。Power BI作为一款强大的商业智能工具&#xff0c;凭借其强大的数据连接能力、丰富的可视化选项以及交互性和动态性&#xff0c;成为了众多企业和个人的首选。本文将…