QOJ.ac

QOJ

Límite de tiempo: 2 s Límite de memoria: 64 MB Puntuación total: 100

#23772. Viaje en barco

Estadísticas

Problema

En el país de JOI hay $n$ islas, y cada isla está numerada del $1$ al $n$. Actualmente, en el país de JOI se está desarrollando una red de rutas marítimas que conecta las islas entre sí.

Trabajas en un centro de boletos que gestiona pasajes de barco. En el país de JOI hay muchas personas que desean viajar entre islas en barco de la forma más económica posible; ellas anotan el lugar de partida y el destino en un formulario de pedido y te lo envían.

Tu trabajo consiste en que, tan pronto como recibas un formulario de pedido de un cliente, calcules la tarifa más barata entre las rutas que conectan el punto de partida y el destino haciendo transbordo entre varios barcos, y se la comuniques al cliente. Sin embargo, según el itinerario, puede haber casos en los que no sea posible viajar en barco. En ese caso, es necesario informar al cliente que «no es posible viajar en barco». Además, en el país de JOI entran en funcionamiento continuamente nuevos barcos que conectan islas entre sí, y esa información se te comunica en cada momento. Al responder a los clientes, debes tener en cuenta la información más reciente.

Dados como entrada los formularios de pedido de los clientes y la información de operación de los barcos que entran en funcionamiento, escribe un programa que determine las respuestas para los clientes.

Entrada

En la línea $1$ de la entrada están escritos $2$ enteros $n, k$ ($1 \le n \le 100, 1 \le k \le 5000$). Esto indica que el número de islas es $n$ y que la entrada consta de $k + 1$ líneas. En la línea $(i + 1)$ ($1 \le i \le k$) están escritos $3$ o $4$ enteros separados por espacios.

  • Cuando el primer número es $0$, esta línea representa el formulario de pedido de un cliente. En esta línea están escritos $3$ enteros $0, a, b$ ($1 \le a \le n, 1 \le b \le n, a \ne b$) separados por espacios. Esto indica que un cliente ha enviado un formulario de pedido con la isla $a$ como punto de partida y la isla $b$ como destino.
  • Cuando el primer número es $1$, esta línea representa la información de un barco que acaba de iniciar su operación. En esta línea están escritos $4$ enteros $1, c, d, e$ ($1 \le c \le n, 1 \le d \le n, c \ne d, 1 \le e \le 1000000$). Esto indica que un barco que realiza viajes de ida y vuelta entre la isla $c$ y la isla $d$ ha comenzado a operar, y que tanto la tarifa de la isla $c$ a la isla $d$ como la tarifa de la isla $d$ a la isla $c$ en este barco son iguales a $e$. Para los formularios de pedido posteriores a esta línea, debes responder teniendo también en cuenta este barco.

En la etapa inicial, hay $0$ barcos operando. En la entrada, el número de líneas que representan información de operación de barcos es a lo sumo $1000$. Asimismo, ten en cuenta que pueden operar varios barcos entre un mismo par de islas.

Salida

Sea $m$ el número de líneas que representan formularios de pedido en la entrada. La salida consta de $m$ líneas, y en la línea $i$ ($1 \le i \le m$) debes escribir un entero que represente la respuesta al $i$-ésimo formulario de pedido. Es decir, si es posible viajar entre el punto de partida y el destino del $i$-ésimo formulario de pedido haciendo transbordo entre varios barcos, escribe el valor mínimo de la suma de sus tarifas; si es imposible viajar, escribe $-1$.

Ejemplos de entrada y salida

Ejemplo de entrada 1

3 8
1 3 1 10
0 2 3
1 2 3 20
1 1 2 5
0 3 2
1 1 3 7
1 2 1 9
0 2 3

Ejemplo de salida 1

-1
15
12

Ejemplo de entrada 2

5 16
1 1 2 343750
1 1 3 3343
1 1 4 347392
1 1 5 5497
1 2 3 123394
1 2 4 545492
1 2 5 458
1 3 4 343983
1 3 5 843468
1 4 5 15934
0 2 1
0 4 1
0 3 2
0 4 2
0 4 3
0 5 3

Ejemplo de salida 2

5955
21431
9298
16392
24774
8840

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.