class Solution:
def numOfMinutes(self, n: int, headID: int, manager: List[int], informTime: List[int]) -> int:
adj = [[] for _ in range(n)]
for i in range(n):
if i != headID:
adj[manager[i]].append(i)
def dfs(node):
res = 0
for child in adj[node]:
res = max(res, informTime[node] + dfs(child))
return res
return dfs(headID)class Solution:
def numOfMinutes(self, n: int, headID: int, manager: List[int], informTime: List[int]) -> int:
adj = defaultdict(list)
for i in range(n):
adj[manager[i]].append(i)
q = deque([(headID, 0)]) # (id, time)
res = 0
while q:
node, time = q.popleft()
res = max(res, time)
for emp in adj[node]:
q.append((emp, time + informTime[node]))
return resclass Solution:
def numOfMinutes(self, n: int, headID: int, manager: List[int], informTime: List[int]) -> int:
indegree = [0] * n
time = [0] * n
for i in range(n):
if manager[i] != -1:
indegree[manager[i]] += 1
queue = deque()
for i in range(n):
if indegree[i] == 0:
queue.append(i)
while queue:
node = queue.popleft()
time[node] += informTime[node]
if manager[node] != -1:
time[manager[node]] = max(time[manager[node]], time[node])
indegree[manager[node]] -= 1
if indegree[manager[node]] == 0:
queue.append(manager[node])
return time[headID]class Solution:
def numOfMinutes(self, n: int, headID: int, manager: List[int], informTime: List[int]) -> int:
def dfs(node):
if manager[node] != -1:
informTime[node] += dfs(manager[node])
manager[node] = -1
return informTime[node]
res = 0
for node in range(n):
res = max(res, dfs(node))
return res