Back to Month
HARD 03 Jul 2026

3620. Network Recovery Pathways

</> Solution

import java.util.*;

class Solution {
    public int findMaxPathScore(int[][] edges, boolean[] online, long k) {
        int n = online.length;

        List<int[]>[] graph = new ArrayList[n];
        for (int i = 0; i < n; i++) graph[i] = new ArrayList<>();

        int maxCost = 0;
        for (int[] e : edges) {
            graph[e[0]].add(new int[]{e[1], e[2]});
            maxCost = Math.max(maxCost, e[2]);
        }

        int lo = 0, hi = maxCost, ans = -1;

        while (lo <= hi) {
            int mid = lo + (hi - lo) / 2;
            if (canReach(graph, online, k, mid, n)) {
                ans = mid;
                lo = mid + 1;
            } else {
                hi = mid - 1;
            }
        }

        return ans;
    }

    private boolean canReach(List<int[]>[] graph, boolean[] online, long k, int limit, int n) {
        long[] dist = new long[n];
        Arrays.fill(dist, Long.MAX_VALUE);
        dist[0] = 0;

        int[] indegree = new int[n];

        for (int u = 0; u < n; u++) {
            if (u != 0 && u != n - 1 && !online[u]) continue;

            for (int[] e : graph[u]) {
                int v = e[0];
                if (v != 0 && v != n - 1 && !online[v]) continue;
                if (e[1] < limit) continue;
                indegree[v]++;
            }
        }

        Queue<Integer> q = new ArrayDeque<>();
        for (int i = 0; i < n; i++) {
            if ((i == 0 || i == n - 1 || online[i]) && indegree[i] == 0) {
                q.offer(i);
            }
        }

        while (!q.isEmpty()) {
            int u = q.poll();

            for (int[] e : graph[u]) {
                int v = e[0];
                int w = e[1];

                if (v != 0 && v != n - 1 && !online[v]) continue;
                if (w < limit) continue;

                if (dist[u] != Long.MAX_VALUE && dist[u] + w < dist[v]) {
                    dist[v] = dist[u] + w;
                }

                if (--indegree[v] == 0) {
                    q.offer(v);
                }
            }
        }

        return dist[n - 1] <= k;
    }
}

TIME COMPLEXITY

O((V + E) × log M)

SPACE COMPLEXITY

O(V + E)

TOPICS

Binary Search Binary Tree Graph