Rutas Baratas X81287


Statement
 

pdf   zip

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).

Public test cases
  • 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
    
  • Information
    Author
    Conrado Martinez
    Language
    Spanish
    Translator
    Conrado Martinez
    Original language
    English
    Other languages
    Catalan English
    Official solutions
    C++
    User solutions
    C++