LeetCode 2492. Minimum Score of a Path Between Two Cities Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
2492. Minimum Score of a Path Between Two Cities

Description

You are given a positive integer n representing n cities numbered from 1 to n. You are also given a 2D array roads where roads[i] = [ai, bi, distancei] indicates that there is a bidirectional road between cities ai and bi with a distance equal to distancei. The cities graph is not necessarily connected.

The score of a path between two cities is defined as the minimum distance of a road in this path.

Return the minimum possible score of a path between cities 1 and n.

Note:

  • A path is a sequence of roads between two cities.
  • It is allowed for a path to contain the same road multiple times, and you can visit cities 1 and n multiple times along the path.
  • The test cases are generated such that there is at least one path between 1 and n.

 

Example 1:

Input: n = 4, roads = [[1,2,9],[2,3,6],[2,4,5],[1,4,7]]
Output: 5
Explanation: The path from city 1 to 4 with the minimum score is: 1 -> 2 -> 4. The score of this path is min(9,5) = 5.
It can be shown that no other path has less score.

Example 2:

Input: n = 4, roads = [[1,2,2],[1,3,4],[3,4,7]]
Output: 2
Explanation: The path from city 1 to 4 with the minimum score is: 1 -> 2 -> 1 -> 3 -> 4. The score of this path is min(2,2,4,7) = 2.

 

Constraints:

  • 2 <= n <= 105
  • 1 <= roads.length <= 105
  • roads[i].length == 3
  • 1 <= ai, bi <= n
  • ai != bi
  • 1 <= distancei <= 104
  • There are no repeated edges.
  • There is at least one path between 1 and n.

Solutions

Solution 1: DFS

According to the problem description, each edge can be passed multiple times, and it is guaranteed that node 1 and node n are in the same connected component. Therefore, the problem is actually looking for the smallest edge in the connected component where node 1 is located. We can use DFS, start searching from node 1, and find the smallest edge.

The time complexity is O(n + m), where n and m are the number of nodes and edges, respectively.

PythonJavaC++GoTypeScriptRustJavaScript
class Solution: def minScore(self, n: int, roads: List[List[int]]) -> int: def dfs(i): nonlocal ans for j, d in g[i]: ans = min(ans, d) if not vis[j]: vis[j] = True dfs(j) g = defaultdict(list) for a, b, d in roads: g[a].append((b, d)) g[b].append((a, d)) vis = [False] * (n + 1) ans = inf dfs(1) return ans(code-box)

Solution 2: BFS

We can also use BFS to solve this problem.

The time complexity is O(n + m), where n and m are the number of nodes and edges, respectively.

PythonJavaC++Go
class Solution: def minScore(self, n: int, roads: List[List[int]]) -> int: g = defaultdict(list) for a, b, d in roads: g[a].append((b, d)) g[b].append((a, d)) vis = [False] * (n + 1) vis[1] = True ans = inf q = deque([1]) while q: for _ in range(len(q)): i = q.popleft() for j, d in g[i]: ans = min(ans, d) if not vis[j]: vis[j] = True q.append(j) return ans(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !