5354. 通知所有員工所需的時間



# DFS自底向上
'''
class Solution:
    def numOfMinutes(self, n: int, headID: int, manager, informTime) -> int:

        visited = [False] * n

        res = 0
        for i in manager:
            # 曾經經過的,說明計算過
            if visited[i]:
                continue
            total = 0

            while i != -1:
                visited[i] = True
                total += informTime[i]
                i = manager[i]

            if res < total:
                res = total
        return res
'''

'''
思路:DFS自頂向下

from collections import defaultdict
class Solution:
    def numOfMinutes(self, n: int, headID: int, manager, informTime) -> int:

        a = defaultdict(list)
        for i in range(len(manager)):
            a[manager[i]].append(i)

        def find(n, headID, manager, informTime):

            # 明到了最下屬
            if informTime[headID] == 0:
                return 0

            # 如果不是最下屬,找孩子的最大時間
            time = 0

            # 防止遍歷找,就通過了
            for i in a[headID]:
                # 找下屬的最大值
                t = find(n, i, manager, informTime) + informTime[headID]

                if time < t:
                    time = t

            return time

        t = find(n, headID, manager, informTime)
        return t
'''

# BFS
from queue import Queue
from collections import defaultdict
class Solution:
    def numOfMinutes(self, n: int, headID: int, manager, informTime) -> int:

        q = Queue()
        tmp = defaultdict(list)

        for i in range(len(manager)):
            if manager[i] == -1:
                continue
            tmp[manager[i]].append(i)

        q.put((headID, 0))
        result = 0
        while not q.empty():
            this_id, val = q.get()

            for id_ in tmp[this_id]:
                q.put((id_, val+informTime[this_id]))
                result = max(result, val+informTime[this_id])

        return result


s = Solution()
n = 6
headID = 2
manager = [2,2,-1,2,2,2]
informTime = [0,0,1,0,0,0]
s.numOfMinutes(n, headID, manager, informTime)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章