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 <= 1051 <= roads.length <= 105roads[i].length == 31 <= ai, bi <= nai != bi1 <= distancei <= 1041 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]);
}
}