class Solution {
public int numOfMinutes(int n, int headID, int[] manager, int[] informTime) {
// manager idx -> list of sub idx
Map<Integer, List<Integer>> map = new HashMap<>();
for (int i = 0; i < manager.length; i++) {
int man = manager[i];
List<Integer> list = map.get(man);
if (list == null) {
list = new ArrayList<>();
}
list.add(i);
map.put(man, list);
}
return dfs(headID, map, informTime);
}
private int dfs(int e, Map<Integer, List<Integer>> map, int[] informTime) {
if (map.get(e) == null) {
return 0;
}
List<Integer> list = map.get(e);
int tmp = 0;
for (int s : list) {
tmp = Math.max(tmp, dfs(s, map, informTime));
}
return informTime[e] + tmp;
}
}