Medium
,DFS
,BFS
,Graph
2492. Minimum Score of a Path Between Two Cities
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]
= [
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:
1
and n
multiple times along the path.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:
n
<= 105roads.length
<= 105roads[i].length
== 3n
1
and n
.
class Solution {
public:
int minScore(int n, vector<vector<int>>& roads) {
vector<vector<pair<int, int>>> graph(n + 1);
for (auto road : roads) {
graph[road[0]].push_back({road[1], road[2]});
graph[road[1]].push_back({road[0], road[2]});
}
vector<bool> visit(n+1);
queue<int> q;
q.push(1);
int ans = INT_MAX;
while (!q.empty()) {
auto node = q.front(); q.pop();
for (auto [child, distance] : graph[node]) {
ans = min(ans, distance);
if (visit[child]) continue;
visit[child] = true;
q.push(child);
}
}
return ans;
}
};
Yen-Chi ChenWed, Mar 22, 2023
class Solution:
def minScore(self, n: int, roads: List[List[int]]) -> int:
self.ans = math.inf
graph = defaultdict(list)
for a, b, dis in roads:
graph[a].append((b, dis))
graph[b].append((a, dis))
vis = set()
def dfs(node):
vis.add(node)
for nei, cost in graph[node]:
self.ans = min(self.ans, cost)
if nei in vis:
continue
dfs(nei)
dfs(1)
return self.ans
Ron ChenWed, Mar 22, 2023
function minScore(n, roads) {
const graph = new Array(n + 1).fill(0).map(() => []);
for (const [v1, v2, score] of roads) {
graph[v1].push([v2, score]);
graph[v2].push([v1, score]);
}
const visited = new Array(n + 1).fill(false);
const stack = [[1, Infinity]];
let minScore = Infinity;
while (stack.length) {
const [node, score] = stack.pop();
minScore = Math.min(minScore, score);
if (visited[node]) continue;
visited[node] = true;
for (const [vertex, vertexScore] of graph[node]) {
stack.push([vertex, vertexScore]);
}
}
return minScore;
}
MarsgoatWed, Mar 22, 2023