class Solution {
public:
int networkDelayTime(vector<vector<int>>& times, int n, int k) { // dijkstra 算法解的
priority_queue<vector<int>, vector<vector<int> >, greater<vector<int> > > PQ;
set<int> S;
vector<vector<pair<int, int> > > G(n+1);
for(int ii = 0; ii < times.size(); ii++) {
auto A = times[ii];
int u = A[0], v = A[1], w = A[2];
G[u].push_back({v, w});
}
PQ.push({0, k});
int max_time = 0;
while(!PQ.empty() && S.size() < n) {
auto A = PQ.top();
PQ.pop();
int now_w = A[0], now_u = A[1];
if(S.find(now_u) != S.end()) continue;
S.insert(now_u);
max_time = max(max_time, now_w);
for(int ii = 0; ii < G[now_u].size(); ii++) {
int v = G[now_u][ii].first, next_w = G[now_u][ii].second;
if(S.find(v) != S.end()) continue;
PQ.push({now_w + next_w, v});
}
}
if(S.size() != n) return -1;
return max_time;
}
};
【leetcode C++】743. Network Delay Time
最新推荐文章于 2021-08-10 20:06:57 发布