Ejercicio00:00
¿Quieres un reto mayor?
Resuelve en 20:00
info
Importante: Para que se registre el resultado tienes que iniciar sesión.
Máximo flujo: algoritmo de Dinic
Master100 pts·Algoritmos
Enunciado
Máximo flujo: algoritmo de Dinic
Implementa el algoritmo de Dinic para calcular el flujo máximo en una red de flujo.
El algoritmo de Dinic es más eficiente que Edmonds-Karp: su complejidad es O(V² · E), frente a O(V · E²) de Edmonds-Karp. Lo logra combinando dos fases:
- BFS — construye un grafo de niveles (level graph) asignando a cada nodo su distancia en saltos desde la fuente.
- DFS bloqueante — encuentra flujos bloqueantes en el grafo de niveles usando un puntero de avance (
ptr) para evitar recorrer aristas ya agotadas.
Estas dos fases se repiten hasta que el sumidero deja de ser alcanzable desde la fuente.
Entrada
n— número de nodos (numerados de0an-1).source— nodo fuente.sink— nodo sumidero.edges— array de aristas, cada una representada como[u, v, capacity].
Las aristas son dirigidas. Internamente debes mantener aristas inversas con capacidad 0 para permitir cancelaciones de flujo.
Salida
Entero con el valor del flujo máximo de source a sink.
Ejemplo
// Red con 4 nodos (0=fuente, 3=sumidero)
const edges = [[0,1,3],[0,2,3],[1,2,2],[1,3,3],[2,3,2]];
dinicsMaxFlow(4, 0, 3, edges); // → 5
Restricciones
2 ≤ n ≤ 5000 ≤ edges.length ≤ 50001 ≤ capacity ≤ 10⁶- No hay auto-bucles ni aristas paralelas con la misma dirección.
Restriccionesexpand_more
- Dificultad: Master
- Completa todos los test cases para obtener los 100 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.
Inicia sesión para reaccionar
Inicia sesión para reaccionar