Medium
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:
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:
2 <= n <= 105
1 <= roads.length <= 105
roads[i].length == 3
1 <= ai, bi <= n
ai != bi
1 <= distancei <= 104
1
and n
.import java.util.Arrays;
public class Solution {
private int[] dsu;
public int minScore(int n, int[][] roads) {
dsu = new int[n + 1];
int[] ans = new int[n + 1];
for (int i = 0; i <= n; i++) {
dsu[i] = i;
}
Arrays.fill(ans, Integer.MAX_VALUE);
for (int[] r : roads) {
int a = find(r[0]);
int b = find(r[1]);
dsu[a] = dsu[b];
ans[a] = ans[b] = Math.min(r[2], Math.min(ans[a], ans[b]));
}
return ans[find(1)];
}
private int find(int i) {
return dsu[i] == i ? i : find(dsu[i]);
}
}