type
status
date
slug
summary
tags
category
icon
password
创建时间
Jan 13, 2025 02:26 AM
现有一个加权无向连通图。给你一个正整数
n
,表示图中有 n
个节点,并按从 1
到 n
给节点编号;另给你一个数组 edges
,其中每个 edges[i] = [ui, vi, weighti]
表示存在一条位于节点 ui
和 vi
之间的边,这条边的权重为 weighti
。从节点
start
出发到节点 end
的路径是一个形如 [z0, z1, z2, ..., zk]
的节点序列,满足 z0 = start
、zk = end
且在所有符合 0 <= i <= k-1
的节点 zi
和 zi+1
之间存在一条边。路径的距离定义为这条路径上所有边的权重总和。用
distanceToLastNode(x)
表示节点 n
和 x
之间路径的最短距离。受限路径 为满足 distanceToLastNode(zi) > distanceToLastNode(zi+1)
的一条路径,其中 0 <= i <= k-1
。返回从节点
1
出发到节点 n
的 受限路径数 。由于数字可能很大,请返回对 109 + 7
取余 的结果。Dijkstra 算法 + 递推(动态规划)
思路:针对这种抛出一个概念,让你依据概念来做题的,我们需要非常情况题中概念的含义,需要做转换(转换为我们人能读懂更一般的表述),并明确可能的一些边界条件。
题目中描述的受限路径,更一般的表述是:在受限路径中,每个节点到节点 n 的最短路径是逐渐缩小的。例如 1→2→3,则 2→3 的最短路径要严格小于 1→3 的最短路径。
有了对受限路径清楚的认识,我们就可以来拆分这一道题了。我们将题目拆分为两步:第一步,先求所有点到节点 n 的最短路径;第二步,根据最短路径的顺序,求出方案数。