Cómo resolver http://www.spoj.com/problems/SAMER08A/ usando el algoritmo de Dijkstra

El problema dado se puede dividir en 2 subproblemas:

  1. Dado un gráfico, cómo encontrar todos los bordes que vienen en cualquiera de las rutas más cortas del gráfico.
  2. Al encontrar la ruta más corta en el gráfico donde tiene 2, elimine los bordes mencionados anteriormente.

Parte 1: utilice el algoritmo de dijkstra para mantener 2 matrices dis1 y dis2 donde dis1 [i] representa la distancia del nodo i desde el origen y dis2 [i] representa la distancia del nodo desde el destino. Ahora mantenga todos los nodos que se visitan en la ruta más corta. (si para un nodo i dis1 [i] + dis2 [i] == dis1 [destino] {distancia más corta}, debería incluirse). Todos los bordes cuyos extremos están en el camino más corto son los bordes que necesitamos marcar.

Complejidad: O (e * log (v) + v + e)

Parte 2: aplique nuevamente el algoritmo de dijkstra, pero al insertar vecinos en la cola de prioridad, verifique que si el borde pertenece al conjunto de bordes marcados (en caso afirmativo, omítalo).

Complejidad: O (e * log (v))

Complejidad general: O (e * log (v))

Aquí está mi solución aceptada: Ideone.com (eche un vistazo si está atascado)

¡Espero eso ayude! 🙂

http://www.chetanahegde.in/wp-co … sigues este tutorial.

y pronto resolveré y publicaré respuesta

More Interesting

¿Cómo son útiles las conferencias sobre algoritmos de Ravindra Babu Ravula para las entrevistas en el campus?

Cómo resolver CCC2016S4

¿A qué libro se refirió Thomas Cormen mientras estudiaba algoritmos?

¿Cómo diseñaría un algoritmo para clasificar 100 millones de libros y encontrar duplicados funcionales?

¿Cuáles son las condiciones previas de la búsqueda binaria y qué papel desempeñan?

Alguien en mi escuela secundaria dijo que en realidad no puedo resolver un cubo de Rubik porque tengo que confiar en patrones (algoritmos). ¿Cuán verdadera es esta afirmación?

Cómo definir una estructura de datos de gráfico dinámico en C ++ (un gráfico que tiene un número desconocido de vértices)

¿En qué situaciones alguien usaría Dijkstra sin un montón sobre Dijkstra con un montón?

¿Cuál es el algoritmo utilizado por la búsqueda de imagen inversa de Google (es decir, la búsqueda por imagen)? ¿Qué algoritmos necesitaría entender para crear una funcionalidad similar a pequeña escala?

¿Cómo afecta el subprocesamiento múltiple al rendimiento de diferentes algoritmos de clasificación?

¿Cuáles son los diferentes métodos utilizados para representar el árbol binario?

¿Cuáles son las aplicaciones del mundo real de algunas estructuras de datos avanzadas, y cuándo elegiría una estructura de datos sobre otra, en el caso de estructuras de datos similares?

Cómo implementar la ordenación de inserción recursiva usando una lista vinculada

¿Cuáles son los principios o características esenciales de los algoritmos gráficos en informática?

¿Cuál es el mejor algoritmo de compresión de imágenes y cuál es el algoritmo de compresión de Facebook?