5354. 通知所有员工所需的时间

公司里有 n 名员工,每个员工的 ID 都是独一无二的,编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。

在 manager 数组中,每个员工都有一个直属负责人,其中 manager[i] 是第 i 名员工的直属负责人。对于总负责人,manager[headID] = -1。题目保证从属关系可以用树结构显示。

公司总负责人想要向公司所有员工通告一条紧急消息。他将会首先通知他的直属下属们,然后由这些下属通知他们的下属,直到所有的员工都得知这条紧急消息。

第 i 名员工需要 informTime[i] 分钟来通知它的所有直属下属(也就是说在 informTime[i] 分钟后,他的所有直属下属都可以开始传播这一消息)。

返回通知所有员工这一紧急消息所需要的 分钟数 。

示例 1:

输入:n = 1, headID = 0, manager = [-1], informTime = [0]
输出:0
解释:公司总负责人是该公司的唯一一名员工。

1.比赛时没做出来,思路不清晰。。其实一个很简单的思路就是从底往上遍历,记录最大值。。就是从底往上的dfs

2.也可以自顶向下,但得先得到我是领导我手底下都有哪些人的关系,在dfs

class Solution(object):
    def numOfMinutes(self, n, headID, manager, informTime):
        """
        :type n: int
        :type headID: int
        :type manager: List[int]
        :type informTime: List[int]
        :rtype: int
        """
        res = 0
        for i in range(len(manager)):
            if informTime[i]==0:
                tmp_res = 0
                index = i
                while index!=-1:
                    tmp_res += informTime[index]
                    index = manager[index]
                res = max(res,tmp_res)
        return res

from collections import defaultdict
class Solution(object):
    def numOfMinutes(self, n, headID, manager, informTime):
        """
        :type n: int
        :type headID: int
        :type manager: List[int]
        :type informTime: List[int]
        :rtype: int
        """
        self.total = 0
        def dfs(tmp, informTime, head_id, total):
            if not tmp[head_id]:
                self.total = max(self.total,total)
            for id in tmp[head_id]:
                dfs(tmp,informTime,id,total+informTime[head_id])
        tmp = defaultdict(list)
        for i in range(len(manager)):
            tmp[manager[i]].append(i)
        dfs(tmp,informTime,headID,0)
        return self.total
发布了200 篇原创文章 · 获赞 17 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_36328915/article/details/104748822