3112. Minimum Time to Visit Disappearing Nodes

class Solution {
public:
    vector<int> minimumTime(int n, vector<vector<int>>& edges, vector<int>& disappear) {
        vector<int> dist(n, -1);
        vector<bool> visited(n, false);

        vector<unordered_map<int, set<int, less<int>>>> map(n);
        for (auto const& e : edges) {
            if (e[0] == e[1]) continue;
            map[e[0]][e[1]].insert(e[2]);
            map[e[1]][e[0]].insert(e[2]);
        }

        // pair<dist: int, node: int>
        priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;

        pq.push({0, 0});
        dist[0] = 0;
        while (!pq.empty()) {
            auto top = pq.top();
            pq.pop();
            const int cur_dist = top.first;
            const int cur = top.second;

            if (visited[cur] || dist[cur] == -1) continue;
            visited[cur] = true;

            for (auto const& map_n : map[cur]) {
                const int i = map_n.first; // The node links to cur
                const int new_dist = *map_n.second.begin() + dist[cur];
                if (new_dist < disappear[i] && (dist[i] == -1 || dist[i] > new_dist)) {
                    dist[i] = new_dist;
                    pq.push({new_dist, i});
                }
            }
        }

        return dist;
    }
};

Last updated