Skip to Content

Flujo con cotas inferiores

HechoFuenteNombreDificultadTagsSolución
Wesley's Anger ContestHungry SquirrelsNormal

Tutorial

Recursos
FuenteRecursoNotas
CMUFlow Extensions
cp-algorithmsFlows 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: 0f(e)c(e)0 \le f(e) \le c(e). Ahora consideramos redes donde cada arista ee tiene además una cota inferior (e)\ell(e), de modo que cualquier flujo válido debe satisfacer

(e)f(e)c(e). \ell(e) \le f(e) \le c(e).

En otras palabras, ahora estamos obligados a empujar al menos (e)\ell(e) unidades de flujo por ee. Esta única extensión es sorprendentemente potente: muchos problemas que no se parecen en nada a flujo (“cada tarea debe realizarse al menos xx veces”, “cada persona canta entre aa y bb 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: (e)f(e)c(e)\ell(e) \le f(e) \le c(e), 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 SS y TT y conectamos TST \rightarrow S con capacidad \infty. Luego, aplicamos la siguiente transformación a cada arista e=uve = u \rightarrow v:

  • Conectamos uTu \rightarrow T y SvS \rightarrow v con capacidad l(e)l(e).
  • Reducimos la capacidad de uvu \rightarrow v a c(e)l(e)c(e) - l(e).

800|center

La idea es que, en esta red transformada, el flujo por ee se enruta primero por el ciclo azul (uTSvu \rightarrow T \rightarrow S \rightarrow v) hasta saturar las l(e)l(e) unidades, y solo el exceso pasa por ee 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 SS a TT y comprobar si el flujo resultante es exactamente l(e)\sum l(e).

Para recuperar la circulación real, tomamos el flujo g(e)g(e) hallado en la red auxiliar y le sumamos de nuevo la cota inferior: f(e)=g(e)+(e)f(e) = g(e) + \ell(e).

Flujo factible con fuente y sumidero

Ahora supongamos que tenemos una fuente ss y un sumidero tt, y queremos cualquier flujo de ss a tt que respete las cotas inferiores. La restricción de conservación debe cumplirse en todos lados excepto ss y tt.

Reducimos esto al caso de circulación con una arista extra: agregamos una arista de tt de vuelta a ss con cota inferior 00 y capacidad \infty. 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 ss y tt, 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 tst \to s.

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 ss a tt sujeto a las cotas inferiores. Se hace en dos fases:

  1. 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.

  2. Aumentar en la red residual. Quitamos los SS y TT auxiliares y la arista tst \to s, y luego corremos un flujo máximo ordinario de ss a tt 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 sts \to t tan alto como sea posible.

    Para flujo mínimo, en cambio corremos un flujo máximo de tt a ss en el grafo residual y lo restamos: cancelamos tanto flujo circulante como sea posible manteniendo cada arista por encima de su cota inferior.

Problemas

HechoFuenteNombreDificultadTagsSolución
CFDiverse SingingNormal
CFCaptain AmericaNormal
CFIncorrect FlowNormal
ACMulti-Path StoryNormal
CFShowing OffMuy difícil