题目1:最低网络延迟

有 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
分析思路:首先看到这道题,我们从入口节点开始,处理完2要向下处理1和3,想到是一个广度优先搜索。于是我尝试用队列去实现它,然而每一条边的权值(时间)可能不同,又想到需要用的优先队列,但涉及到时间的推移权值的变化很难考虑,突然感觉事情不太对。于是Refer to“讨论”,果然。
恍然大悟。没有抓到这个问题的本质,实际上这是一个最短路径问题,既然所有路径都并行执行,需要得到总时间,只需要计算时间最长的一条路径就可以了,考虑到图中可能存在环的情况,记录当前路径已经访问过的节点,防止二次访问。