3807. Minimum Cost to Repair Edges to Traverse a Graph π
Description
You are given an undirected graph with n nodes labeled from 0 to n - 1. The graph consists of m edges represented by a 2D integer array edges, where edges[i] = [ui, vi, wi] indicates that there is an edge between nodes ui and vi with a repair cost of wi.
You are also given an integer k. Initially, all edges are damaged.
You may choose a non-negative integer money and repair all edges whose repair cost is less than or equal to money. All other edges remain damaged and cannot be used.
You want to travel from node 0 to node n - 1 using at most k edges.
Return an integer denoting the minimum amount of money required to make this possible, or return -1 if it is impossible.
Example 1:
Input: n = 3, edges = [[0,1,10],[1,2,10],[0,2,100]], k = 1
Output: 100
Explanation:
The only valid path using at most k = 1 edge is 0 -> 2, which requires repairing the edge with cost 100. Therefore, the minimum required amount of money is 100.
Example 2:
Input: n = 6, edges = [[0,2,5],[2,3,6],[3,4,7],[4,5,5],[0,1,10],[1,5,12],[0,3,9],[1,2,8],[2,4,11]], k = 2
Output: 12
Explanation:
- With
money = 12, all edges with repair cost at most 12 become usable. - This allows the path
0 -> 1 -> 5, which uses exactly 2 edges and reaches node 5. - If
money < 12, there is no available path of length at mostk = 2from node 0 to node 5. - Therefore, the minimum required money is 12.
Example 3:
Input: n = 3, edges = [[0,1,1]], k = 1
Output: -1
Explanation:
It is impossible to reach node 2 from node 0 using any amount of money. Therefore, the answer is -1.
Constraints:
2 <= n <= 5 * 1041 <= edges.length == m <= 105edges[i] = [ui, vi, wi]0 <= ui, vi < n1 <= wi <= 1091 <= k <= n- There are no self-loops or duplicate edges in the graph.
Solutions
Solution 1: Binary Search + BFS
We observe that the higher the repair cost, the more edges become available, making it easier to satisfy the requirement of reaching node \(n - 1\) from node \(0\) using at most \(k\) edges. Moreover, the minimum repair cost must be among the costs in \(\textit{edges}\). Therefore, we first sort \(\textit{edges}\) by repair cost, then use binary search to find the minimum repair cost that satisfies the requirement.
We perform binary search on the index of the repair cost, defining the left boundary as \(l = 0\) and the right boundary as \(r = |\textit{edges}| - 1\). For the middle position \(mid = \lfloor (l + r) / 2 \rfloor\), we add all edges with repair cost less than or equal to \(\textit{edges}[mid][2]\) to the graph, then use BFS to determine whether we can reach node \(n - 1\) from node \(0\) using at most \(k\) edges. If possible, we update the right boundary to \(r = mid\); otherwise, we update the left boundary to \(l = mid + 1\). After the binary search completes, we need to perform one more BFS to check if \(\textit{edges}[l][2]\) satisfies the requirement. If it does, we return \(\textit{edges}[l][2]\); otherwise, we return \(-1\).
The time complexity is \(O((m + n) \times \log m)\) and the space complexity is \(O(n)\), where \(n\) and \(m\) are the number of nodes and edges, respectively.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | |


