QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 64 MB Total points: 100

#23772. Морское путешествие

Statistics

Условие задачи

В стране JOI есть $n$ островов, пронумерованных от $1$ до $n$. В настоящее время в стране JOI активно развивается сеть морских маршрутов, соединяющих острова между собой.

Вы работаете в билетном центре, который занимается продажей билетов на суда. В стране JOI много людей, желающих путешествовать между островами на судах как можно дешевле; они вписывают пункт отправления и пункт назначения в бланк заказа и присылают его вам.

Ваша работа заключается в том, чтобы сразу после получения бланка заказа от клиента рассчитать минимальную стоимость проезда среди всех маршрутов, соединяющих пункт отправления и пункт назначения с возможными пересадками с одного судна на другое, и сообщить её клиенту. Однако в зависимости от маршрута может оказаться, что добраться на судах невозможно. В таком случае необходимо сообщить клиенту, что «путешествие на судах невозможно». Кроме того, в стране JOI одно за другим начинают курсировать новые суда, соединяющие острова, и эта информация оперативно поступает к вам. Отвечая клиентам, вы должны учитывать самую свежую информацию.

Напишите программу, которая по заданным бланкам заказов клиентов и информации о начале курсирования новых судов определяет ответы клиентам.

Входные данные

В $1$-й строке входных данных записаны $2$ целых числа $n, k$ ($1 \le n \le 100, 1 \le k \le 5000$). Это означает, что количество островов равно $n$, а входные данные состоят из $k + 1$ строк. В $(i + 1)$-й строке ($1 \le i \le k$) через пробел записаны $3$ или $4$ целых числа.

  • Если первое число равно $0$, эта строка описывает бланк заказа клиента. В этой строке через пробел записаны $3$ целых числа $0, a, b$ ($1 \le a \le n, 1 \le b \le n, a \ne b$). Это означает, что клиент прислал бланк заказа с островом $a$ в качестве пункта отправления и островом $b$ в качестве пункта назначения.
  • Если первое число равно $1$, эта строка описывает информацию о новом судне, вышедшем на линию. В этой строке записаны $4$ целых числа $1, c, d, e$ ($1 \le c \le n, 1 \le d \le n, c \ne d, 1 \le e \le 1000000$). Это означает, что начало курсировать новое судно, совершающее рейсы туда и обратно между островом $c$ и островом $d$, причём стоимость проезда на этом судне как от острова $c$ до острова $d$, так и от острова $d$ до острова $c$ равна $e$. При ответах на бланки заказов, идущие после этой строки, необходимо учитывать и это судно.

В начальный момент времени курсирует $0$ судов. Во входных данных количество строк с информацией о новых судах не превышает $1000$. Также обратите внимание, что между одной и той же парой островов может курсировать несколько судов.

Выходные данные

Обозначим количество строк с бланками заказов во входных данных через $m$. Выходные данные состоят из $m$ строк; в $i$-й строке ($1 \le i \le m$) выведите целое число, представляющее ответ на $i$-й бланк заказа. То есть, если между пунктом отправления и пунктом назначения $i$-го заказа можно добраться, пересаживаясь с судна на судно, выведите минимальную суммарную стоимость проезда. Если добраться невозможно, выведите $-1$.

Примеры ввода и вывода

Пример ввода 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

Пример вывода 1

-1
15
12

Пример ввода 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

Пример вывода 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.