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
标签:tmp,5354,informTime,int,通知,员工,manager,headID,type 来源: https://blog.csdn.net/qq_36328915/article/details/104748822