Flujo con cotas inferiores
| Hecho | Fuente | Nombre | Dificultad | Tags | Solución |
|---|---|---|---|---|---|
| Wesley's Anger Contest | Hungry Squirrels | Normal | — |
Tutorial
| Fuente | Recurso | Notas |
|---|---|---|
| CMU | Flow Extensions | |
| cp-algorithms | Flows with Lower Bounds |
Hasta ahora, cada arista de nuestra red de flujo tenía una capacidad que sirve como cota superior del flujo que pasa por ella: . Ahora consideramos redes donde cada arista tiene además una cota inferior , de modo que cualquier flujo válido debe satisfacer
En otras palabras, ahora estamos obligados a empujar al menos unidades de flujo por . Esta única extensión es sorprendentemente potente: muchos problemas que no se parecen en nada a flujo (“cada tarea debe realizarse al menos veces”, “cada persona canta entre y canciones”) se reducen a ella.
Circulación factible
Empecemos por la versión más simple, en la que no hay fuente ni sumidero. Una circulación es una asignación de flujo a cada arista tal que
- cada arista respeta sus cotas: , y
- la conservación se cumple en todo vértice: el flujo que entra es igual al que sale.
La pregunta es si existe alguna circulación válida.
Primero ilustramos el grafo de flujo que podemos armar para resolver este problema y luego explicamos por qué funciona. Primero, creamos dos nodos nuevos y y conectamos con capacidad . Luego, aplicamos la siguiente transformación a cada arista :
- Conectamos y con capacidad .
- Reducimos la capacidad de a .

La idea es que, en esta red transformada, el flujo por se enruta primero por el ciclo azul () hasta saturar las unidades, y solo el exceso pasa por misma. Esto implica que todas las cotas inferiores se satisfacen si y solo si todas las aristas azules están saturadas. Para determinar si esto es posible, basta correr un flujo máximo de a y comprobar si el flujo resultante es exactamente .
Para recuperar la circulación real, tomamos el flujo hallado en la red auxiliar y le sumamos de nuevo la cota inferior: .
Flujo factible con fuente y sumidero
Ahora supongamos que sí tenemos una fuente y un sumidero , y queremos cualquier flujo de a que respete las cotas inferiores. La restricción de conservación debe cumplirse en todos lados excepto y .
Reducimos esto al caso de circulación con una arista extra: agregamos una arista de de vuelta a con cota inferior y capacidad . Esta “arista de retorno” lleva el valor neto del flujo del sumidero a la fuente, de modo que la conservación también se cumple en y , y toda la red se convierte en un problema de circulación. Aplicamos la construcción de arriba, y el valor del flujo de la red original es exactamente el flujo enviado por la arista .
Flujo máximo / mínimo con cotas inferiores
A menudo no queremos solo un flujo factible: queremos el flujo máximo (o mínimo) de a sujeto a las cotas inferiores. Se hace en dos fases:
-
Hallar un flujo factible usando la construcción de arriba. Si las aristas azules no se pueden saturar, no existe un flujo válido y nos detenemos.
-
Aumentar en la red residual. Quitamos los y auxiliares y la arista , y luego corremos un flujo máximo ordinario de a sobre el grafo residual que queda. Sumar estos caminos aumentantes al flujo factible lo mantiene factible (solo incrementamos flujo en aristas que tienen capacidad de sobra) a la vez que empujamos el valor tan alto como sea posible.
Para flujo mínimo, en cambio corremos un flujo máximo de a en el grafo residual y lo restamos: cancelamos tanto flujo circulante como sea posible manteniendo cada arista por encima de su cota inferior.
Problemas
| Hecho | Fuente | Nombre | Dificultad | Tags | Solución |
|---|---|---|---|---|---|
| CF | Diverse Singing | Normal | — | ||
| CF | Captain America | Normal | — | ||
| CF | Incorrect Flow | Normal | — | ||
| AC | Multi-Path Story | Normal | — | ||
| CF | Showing Off | Muy difícil | — |