Rutas Baratas

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 a otra ciudad B, gastando la menor cantidad de dinero
posible. Para toda carretera que conecta dos ciudades u y v sabemos el
coste ω(u, v) = ω(v, u) de viajar por dicha carretera (peajes, gasolina,
comidas durante el viaje, …). Cada vez que viajamos de una ciudad u a
una de sus vecinas v debemos parar en v y hacer noche; sabemos los
costes ω^(′)(v) de pernoctar para todas las ciudades v (el coste añadido
por A y B 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
P = [A, v₁, …, v_(n), B]
es
coste(P) = ω(A, v₁) + ω(v₁, v₂) + … + ω(v_(n), B) + ω^(′)(v₁) + … + ω^(′)(v_(n)).

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 A y B, devuelve el
coste de la ruta más barata para ir de A a B, o una indicación de que no
existe tal ruta.

Entrada

Todos los datos de entrada son enteros no negativos. La entrada comienza
con dos enteros 2 ≤ n ≤ 10000 y m, 0 ≤ m ≤ 20n. A continuación, viene
una secuencia de n enteros no negativos ω^(′)(0), …, ω^(′)(n − 1), los
pesos ω^(′)(u) de los n vértices del grafo. Luego viene una secuencia
con las m aristas del grafo en forma de tripletas ⟨u, v, ω(u, v)⟩. Los
vértices u y v son enteros en el rango {0, …, n − 1} y los pesos ω(u, v)
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 ⟨A_(i), B_(i)⟩, donde los A_(i)’s y los B_(i)’s
denotan vértices del grafo (0 ≤ A_(i), B_(i) < n).

Salida

Para cada par ⟨A_(i), B_(i)⟩ de la entrada, el programa escribe el coste
δ de la ruta más barata entre A_(i) y B_(i) con el formato
c(A_(i),B_(i)) = δ. Si no hay rutas entre A_(i) y B_(i) el programa
escribe c(A_(i),B_(i)) = +oo. Cada línea de la salida termina con un
salto de línea (endl).

Información del problema

Autoría: Unknown
Traducción: Conrado Martinez

Generación: 2026-01-25T22:36:17.009Z

© Jutge.org, 2006–2026.
https://jutge.org
