Cómo abordar el problema ‘Mapa intergaláctico’ (IM) en SPOJ usando Max Flow

Primero solucionemos el siguiente problema:
Dado un gráfico no dirigido y vértices S y T, ¿cuántos caminos de vértices disjuntos existen de S a T?


Por ejemplo, en este gráfico, dos caminos disjuntos de S a T están marcados en rojo (S-3-2-T) y azul (S-1-4-T). Tenga en cuenta que si hubiéramos elegido S-2-4-T como una de las rutas, habría sido imposible encontrar otra ruta separada de vértices.

Resolvemos esto reduciéndolo a un problema de flujo máximo. Haremos otro gráfico dirigido donde el flujo máximo es el número de caminos separados de vértices de S a T. Así es como se genera este nuevo gráfico: Asigne S como fuente y T como sumidero. Haga dos copias de cada vértice (llame a las copias del vértice u como Au y Bu). Agregaremos bordes en el nuevo gráfico de la siguiente manera:

  • Si hubo un borde entre S y T en el gráfico original, agregue un borde dirigido con capacidad 1 de S a T en el nuevo gráfico
  • Para cada vértice u con un borde con S en el gráfico original, agregue un borde dirigido con capacidad 1 de S a Au en el nuevo gráfico
  • Para cada vértice u con un borde con T en el gráfico original, agregue un borde dirigido con capacidad 1 de Bu a T en el nuevo gráfico
  • Para cada par de vértices {u, v} con una arista en el gráfico original, agregue aristas dirigidas con capacidad 1 de Bu a Av y de Bv a Au
  • Agregue un borde dirigido con capacidad 1 de Au a Bu para todos los u

Aquí está el gráfico modificado para el gráfico que se muestra arriba:

Tenga en cuenta cómo se transforman los caminos. En particular, cada vértice u en la ruta da como resultado el uso del borde Au-> Bu, y esto asegura que ningún vértice sea parte de más de una ruta. Por lo tanto, es fácil ver que el flujo máximo de S a T en este gráfico le da el número máximo de caminos separados de vértices entre S y T en el gráfico original.

Ahora, ¿cómo reducimos el problema del mapa intergaláctico a esto? Simple. Agregue un nuevo vértice X y conéctelo a Naboo y Coruscant. Encontrar un camino de vértices disjuntos de Naboo a Tatooine a Coruscant es posible si y solo si el número de caminos de vértices disjuntos de Tatooine a X es exactamente 2. Use la reducción gráfica anterior y ya está.

More Interesting

Dados n puntos en un plano 2D, ¿cómo encontrarías el número máximo de puntos que se encuentran en la misma línea recta? Proporcione un algoritmo para resolver este problema.

¿Qué tipo de datos debo usar en C para almacenar datos como a1b2c3? ¿Podría usar una matriz de caracteres para almacenar esto como una cadena?

Cómo calcular la correlación de cada fila en una matriz 2D con una matriz 1D de la misma longitud

¿Cuál es el mejor libro para aprender algoritmos genéticos? ¿Por qué?

Algoritmos: ¿Qué sucede cuando un usuario crea una matriz de tamaño -100, qué sucede en la memoria?

¿Cuál es el orden cronológico de los algoritmos de reconocimiento facial?

¿Cómo funciona el algoritmo de vista en Quora?

¿Cuáles son algunos buenos libros para aprender y practicar estructuras de datos y algoritmos?

¿Qué nivel de estadísticas y algoritmos necesito saber para ser bueno en el aprendizaje automático de estadísticas?

¿Qué aplicación utiliza el algoritmo?

Cuando quitamos un borde de un árbol, parece obvio que nos quedan dos árboles, pero ¿cómo podríamos probar esto?

Hago segmentación usando el algoritmo de cambio medio en MATLAB, pero obtengo mis objetos segmentados. ¿Cómo puedo fusionar partes segmentadas de mi objeto que son diferentes por color y tamaño?

¿Cuál es el algoritmo o algún factor relevante de la clasificación de Google Play?

¿Qué son los algoritmos gráficos?

Cómo alterar el rango de un bucle for dentro del bucle en Python