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 positivos. 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
positivos 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 positivos. La entrada comienza
con dos enteros 2 ≤ n ≤ 10000 y m, 0 ≤ m ≤ 20n. A continuación, viene
una secuencia de n enteros positivos ω^(′)(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 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 ⟨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: Prof. EDA

Generación: 2026-01-25T11:03:43.087Z

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