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 positivos. Por lo tanto el coste de la ruta es
Escribe un programa en C++ que, dados un garfo no dirigido con pesos positivos 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 positivos. La entrada comienza con dos enteros y , . A continuación, viene una secuencia de enteros positivos , 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 positivos. Ningún peso, ni de aristas ni de vértices, es mayor que 100000. 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