QOJ.ac

QOJ

시간 제한: 2 s 메모리 제한: 64 MB 총점: 100

#23772. 배 여행

통계

문제

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.