¿Quieres un reto mayor?
Resuelve en 15:00
Importante: Para que se registre el resultado tienes que iniciar sesión.
Tiempo mínimo para completar todas las tareas con paralelismo
Enunciado
Tiempo mínimo para completar todas las tareas con paralelismo
Dado un conjunto de tareas, cada una con una duración y una lista de dependencias (tareas que deben completarse antes), y asumiendo que se dispone de trabajadores ilimitados (se puede ejecutar cualquier número de tareas en paralelo), calcula el tiempo mínimo necesario para completar todas las tareas.
Cada tarea se identifica por un número entero de 0 a n-1. Las dependencias forman un grafo acíclico dirigido (DAG). Si hay un ciclo, retorna -1.
Parámetros
durations: array de enteros dondedurations[i]es la duración de la tareai.dependencies: array de pares[a, b]donde la tareaadebe completarse antes de que pueda comenzar la tareab.
Valor de retorno
El tiempo mínimo (entero) para completar todas las tareas, o -1 si existe un ciclo.
Ejemplos
// 3 tareas: 0→1→2, duraciones [3, 2, 1]
// Camino: tarea 0 (termina en t=3) → tarea 1 (termina en t=5) → tarea 2 (termina en t=6)
minTaskTime([3, 2, 1], [[0, 1], [1, 2]]); // 6
// Tareas independientes: pueden correr en paralelo
// duraciones [4, 3, 2], sin dependencias → la más larga tarda 4
minTaskTime([4, 3, 2], []); // 4
// Ciclo detectado → -1
minTaskTime([1, 1], [[0, 1], [1, 0]]); // -1
Restricciones
1 ≤ n ≤ 10000 ≤ durations[i] ≤ 10^40 ≤ dependencies.length ≤ 5000- No hay auto-dependencias (
a ≠ ben cada par)
Restriccionesexpand_more
- Dificultad: Difícil
- Completa todos los test cases para obtener los 50 puntos.
- No modificar la línea
exportal final del archivo. - Se recomienda evitar el uso de inteligencia artificial para que realmente tú practiques los ejercicios.
Puedes usar console.log() para depurar. Los resultados aparecen en la Consola de salida, no en el navegador.