题意分析
算法思路
这题太基础了,就是dijkstra求个最短路径,最后看所有点是否都有到达,到达就输出所有最短路径中的最大值,没到就返回-1。这题经典模板了。
代码实现
const int inf=INT_MAX/2;
typedef pair<int,int> PII;
class Solution {
public:
int networkDelayTime(vector<vector<int>>& times, int n, int k) {
vector<vector<PII>> g(n);
for(auto & t:times){
int a=t[0]-1,b=t[1]-1,c=t[2];
g[a].emplace_back(b,c);
}
priority_queue<PII,vector<PII>,greater<>> q;
q.emplace(0,k-1);
vector<int> dist(n,inf);
while(!q.empty()){
auto [d,i]=q.top();q.pop();
if(dist[i]<inf) continue;
dist[i]=d;
for(auto & [nxt,w]:g[i]){
if(dist[nxt]<inf) continue;
q.emplace(d+w,nxt);
}
}
int ans=*max_element(dist.begin(),dist.end());
return ans==inf?-1:ans;
}
};
解题总结
记好模板。