- 网络延迟时间
有 N 个网络节点,标记为 1 到 N。
给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。
现在,我们从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1。
示例:
输入:times = [[2,1,1],[2,3,1],[3,4,1]], N = 4, K = 2
输出:2
这道题呢,理解题目后自然是能明白应该要找的是起始点到其他点的最长距离,把这个距离输出即可,那么就用dijkstra算法,找到起始点到其他点的最短距离,在最短距离中,找到最长的距离就OK了,这里用*max_element还很方便
class Solution {
const int inf=1e9;
public:
int networkDelayTime(vector<vector<int>>& times, int N, int K) {
vector<vector<int>>g(N+1,vector<int>(N+1,inf));
for(auto &t:times) g[t[0]][t[1]]=t[2];
vector<bool>vis(N+1,false);
vector<int>dis(N+1,inf);
dis[K]=0;
for(int i=0;i<N-1;i++){
int in=-1;
for(int j=1;j<=N;j++){
if(!vis[j]&&(in==-1||dis[j]<dis[in])) in=j;
}
vis[in]=true;
for(int v=1;v<=N;v++){
dis[v]=min(dis[v],dis[in]+g[in][v]);
}
}
int ans=*max_element(dis.begin()+1,dis.end());
return ans==inf?-1:ans;
}
};