Concurso Leetcode 179 concursos semanales (3) ------------ Notificar el tiempo requerido para todos los empleados

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

 

230 artículos originales publicados · 160 alabanzas · 820,000 visitas

Supongo que te gusta

Origin blog.csdn.net/happyAnger6/article/details/104851656
Recomendado
Clasificación