Hemos recopilado abundante información sobre las carreteras locales y alojamientos de una cierta región que queremos visitar. Nuestro plan es ir de una ciudad a otra ciudad , gastando la menor cantidad de dinero posible. Para toda carretera que conecta dos ciudades y sabemos el coste de viajar por dicha carretera (peajes, gasolina, comidas durante el viaje, …). Cada vez que viajamos de una ciudad a una de sus vecinas debemos parar en y hacer noche; sabemos los costes de pernoctar para todas las ciudades (el coste añadido por y a nuestra ruta es 0, ya que son los puntos de origen y de destino). Todos los costes, de vértices y de aristas, son no negativos. Por lo tanto el coste de la ruta es
Escribe un programa en C++ que, dados un garfo no dirigido con pesos no negativos en vértices y en aristas, y dos vértices y , devuelve el coste de la ruta más barata para ir de a , o una indicación de que no existe tal ruta.
Todos los datos de entrada son enteros no negativos. La entrada comienza con dos enteros y , . A continuación, viene una secuencia de enteros no negativos , los pesos de los vértices del grafo. Luego viene una secuencia con las aristas del grafo en forma de tripletas . Los vértices y son enteros en el rango y los pesos son enteros no negativos. Puede asumirse que no hay aristas paralelas diferentes uniendo un mismo par de vértices y que no hay ninguna arista que une a un vértice consigo mismo. Finalmente, la entrada contiene una secuencia de pares , donde los ’s y los ’s denotan vértices del grafo ().
Para cada par
de la entrada, el programa escribe el coste
de la ruta más barata entre
y
con el formato
c(,) = .
Si no hay rutas entre
y
el programa escribe
c(,) = +oo.
Cada línea de la salida termina con un salto de línea
(endl).
Input
6 8 3 6 10 15 5 2 0 1 2 1 2 7 2 3 2 0 2 1 1 3 4 2 4 8 3 4 2 3 0 5 0 4 1 4 2 4 3 1 4 1 2 5 2 2
Output
c(0,4) = 19 c(1,4) = 21 c(2,4) = 8 c(3,1) = 4 c(4,1) = 21 c(2,5) = +oo c(2,2) = 0