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 AA a otra ciudad BB, gastando la menor cantidad de dinero posible. Para toda carretera que conecta dos ciudades uu y vv sabemos el coste ω(u,v)=ω(v,u)\omega(u,v)=\omega(v,u) de viajar por dicha carretera (peajes, gasolina, comidas durante el viaje, …). Cada vez que viajamos de una ciudad uu a una de sus vecinas vv debemos parar en vv y hacer noche; sabemos los costes ω(v)\omega'(v) de pernoctar para todas las ciudades vv (el coste añadido por AA y BB 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,v1,,vn,B]P = [A, v_1, \ldots, v_n, B] es coste(P)=ω(A,v1)+ω(v1,v2)++ω(vn,B)+ω(v1)++ω(vn).\text{coste}(P) = \omega(A,v_1) + \omega(v_1,v_2) + \ldots + \omega(v_n,B) + \omega'(v_1)+\ldots+\omega'(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 AA y BB, devuelve el coste de la ruta más barata para ir de AA a BB, 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 2n100002{\le}n{\le}10000 y mm, 0m20n0{\le}m\le{20n}. A continuación, viene una secuencia de nn enteros no negativos ω(0),,ω(n1)\omega'(0), \ldots, \omega'(n-1), los pesos ω(u)\omega'(u) de los nn vértices del grafo. Luego viene una secuencia con las mm aristas del grafo en forma de tripletas u,v,ω(u,v){\langle}u,v,\omega(u,v)\rangle. Los vértices uu y vv son enteros en el rango {0,,n1}\{0,\ldots,n-1\} y los pesos ω(u,v)\omega(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 Ai,Bi{\langle}A_i, B_i\rangle, donde los AiA_i’s y los BiB_i’s denotan vértices del grafo (0Ai,Bi<n0{\le}A_i,B_i<n).

Salida

Para cada par Ai,Bi{\langle}A_i, B_i\rangle de la entrada, el programa escribe el coste δ\delta de la ruta más barata entre AiA_i y BiB_i con el formato c(AiA_i,BiB_i) = δ\delta. Si no hay rutas entre AiA_i y BiB_i el programa escribe c(AiA_i,BiB_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