题目链接
题目描述
题解
题解一(Java)
作者:@仲景
class Solution {
public int numOfMinutes(int n, int headID, int[] manager, int[] informTime) {
// 构建一个图
Map<Integer, List<Integer>> map = new HashMap<>();
for (int i = 0; i < manager.length; i++) {
// 如果key不存在,创建一个
map.putIfAbsent(manager[i], new ArrayList<Integer>());
// 给key添加一个指向的节点
map.get(manager[i]).add(i);
}
// 深度优先遍历,求最大的带权路径
return dfs(headID, informTime, map);
}
public int dfs(int headId, int[] informTime, Map<Integer, List<Integer>> map) {
// 当前节点指向所有节点的最长带权路径
int maxPath = 0;
for (int childNode : map.getOrDefault(headId, new ArrayList<Integer>())) {
// 递归调用,获取各条路径中权值最大的路径的权值
maxPath = Math.max(maxPath, dfs(childNode, informTime, map));
}
// 最大路径权值+当前路径权值就是结果
return informTime[headId] + maxPath;
}
}