Rutas Baratas P40802


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 positivos. 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 positivos 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 positivos. 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 positivos ω(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 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 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
    Prof. EDA
    Language
    Spanish
    Translator
    Prof. EDA
    Original language
    English
    Other languages
    Catalan English
    Official solutions
    C++
    User solutions
    C++ Python