Hay n empleados en la empresa, y la identificación de cada empleado es única, numerada de 0 a n-1. El jefe de la empresa se identifica por headID.
En la matriz de gerentes, cada empleado tiene una persona directa a cargo, donde el gerente [i] es la persona directa a cargo del i-ésimo empleado. Para la persona a cargo, manager [headID] = -1. El título garantiza que la afiliación se puede mostrar en una estructura de árbol.
El jefe de la compañía quiere notificar a todos los empleados de la compañía de un mensaje urgente. Primero notificará a sus subordinados inmediatos, y luego estos subordinados informarán a sus subordinados, hasta que todos los empleados estén informados de esta noticia urgente.
El i-ésimo empleado necesita informTime [i] minutos para notificar todos sus informes directos (es decir, después de informarTime [i] minutos, todos sus informes directos pueden comenzar a difundir las noticias).
Devuelve el número de minutos necesarios para notificar a todos los empleados de este mensaje de emergencia.
Ejemplo 1:
Entrada: n = 1, headID = 0, manager = [-1], informTime = [0]
Salida: 0
Explicación: El jefe de la compañía es el único empleado de la compañía.
Ejemplo 2
Entrada: n = 6, headID = 2, manager = [2,2, -1,2,2,2], informTime = [0,0,1,0,0,0]
Salida: 1
Explicación: id = 2 El empleado es el gerente general de la empresa y el responsable directo de todos los demás empleados. Necesita 1 minuto para notificar a todos los empleados.
La figura anterior muestra la estructura de árbol de los empleados de la empresa.
Ejemplo 3
Entrada: n = 7, headID = 6, manager = [1,2,3,4,5,6, -1], informTime = [0,6,5,4,3,2,1]
Salida: 21
explicados : Id = 6 para la persona a cargo. Notificará al empleado con id = 5 en 1 minuto.
El empleado con id = 5 notificará al empleado con id = 4 en 2 minutos.
El empleado con id = 4 notificará al empleado con id = 3 en 3 minutos.
El empleado con id = 3 notificará al empleado con id = 2 en 4 minutos.
El empleado con id = 2 notificará al empleado con id = 1 en 5 minutos.
El empleado con id = 1 notificará al empleado con id = 0 en 6 minutos.
Tiempo requerido = 1 + 2 + 3 + 4 + 5 + 6 = 21.
Ejemplo 4
Entrada: n = 15, headID = 0, manager = [-1,0,0,1,1,2,2,3,3,4,4,5,5,6,6], informTime = [1, 1,1,1,1,1,1,0,0,0,0,0,0,0,0]
Resultado: 3
Explicación: En el primer minuto, la persona a cargo notifica a los empleados 1 y 2.
En el segundo minuto notificarán a los empleados 3, 4, 5 y 6.
En el tercer minuto notificarán a los empleados restantes.
Ejemplo 5:
Entrada: n = 4, headID = 2, manager = [3,3, -1,2], informTime = [0,0,162,914]
Salida: 1076
Consejos:
1 <= n <= 10 ^ 5
0 <= headID <n
manager.length == n
0 <= manager [i] <n
manager [headID] == -1
informTime.length == n
0 <= informTime [i ] <= 1000
Si el empleado i no tiene subordinados, informTime [i] == 0.
El título garantiza que todos los empleados puedan recibir notificaciones.
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/time-needed-to-inform-all-employees Los
derechos de autor pertenecen a la red de deducción. Comuníquese con la autorización oficial para la reimpresión comercial e indique la fuente de la reimpresión no comercial.
Mi código:
from collections import defaultdict
class Solution:
def numOfMinutes(self, n: int, headID: int, manager: List[int], informTime: List[int]) -> int:
tree = defaultdict(set)
for i, e in enumerate(manager):
if e == -1:
root = i
else:
tree[e].add(i)
total = 0
q = [(root, informTime[root])]
while q:
n_q = []
while q:
n, t = q.pop()
for child in tree[n]:
if t + informTime[child] > total:
total = t + informTime[child]
n_q.append((child, t + informTime[child]))
q = n_q
return total