class dijkstra{
public:
using pi=pair<int,int>;
vector<vector<pi>> map;
int n;
dijkstra(vector<vector<int>>& edges,int size)
{
n=size;
map.resize(n+1);
for(auto& v:edges)
{
int node1=v[0], node2=v[1], val=v[2];
map[node1].emplace_back(node2,val);
}
}
//返回k节点到所有节点的最短路径数组
vector<int> solve(int k)
{
priority_queue<pi,vector<pi>,greater<pi>> q;
q.emplace(0,k);
vector<int> dis(n+1,INT_MAX);
dis[0]=0;
dis[k]=0;
while(!q.empty())
{
auto [d,node]=q.top();
q.pop();
if(d>dis[node])
continue;
for(auto& [node2,val]:map[node])
{
if(d+val<dis[node2])
{
dis[node2]=d+val;
//cout<<dis[node2]<<endl;
q.emplace(dis[node2],node2);
}
}
}
return dis;
}
};
解法:
class Solution {
public:
int networkDelayTime(vector<vector<int>>& times, int n, int k) {
dijkstra dij(times,n);
vector<int> dis=dij.solve(k);
int ans=0;
for(int x:dis)
{
if(x==INT_MAX)
return -1;
ans=max(ans,x);
}
return ans;
}
};