https://leetcode.com/problems/minimize-the-maximum-edge-weight-of-graph/description/

Tag: Binary Search, DFS

class Solution {
public:
    void dfs(int pre, int cur, vector<vector<pair<int, int>>> &g, vector<bool> &vis, int target) {
        vis[cur] = true;
        for (auto &[nxt, val]: g[cur]) {
            if (nxt == pre || val > target || vis[nxt]) continue;
            dfs(cur, nxt, g, vis, target);
        }
    }

    int minMaxWeight(int n, vector<vector<int>>& edges, int threshold) {
        vector<vector<pair<int, int>>> g(n);
        for (auto &x: edges) {
            g[x[1]].push_back({x[0], x[2]});
        }
        int l = 1, r = 1e6 + 1;
        while (l < r) {
            int mid = (l + r) >> 1;
            vector<bool> vis(n, false);
            dfs(-1, 0, g, vis, mid);
            int cnt = 0;
            for (int i = 0; i < n; i++) cnt += vis[i];
            if (cnt == n) r = mid;
            else l = mid + 1;
        }
        return l == 1e6 + 1 ? -1 : l;
    }
};

本題只有一個大陷阱就是那個沒用的 threshold,只要把他當空氣很快就可以解出來了。