QOJ.ac

QOJ

時間限制: 4 s 記憶體限制: 1024 MB 總分: 100

#23947. 고속도로 통행료 (Highway Tolls)

统计

문제 설명

JOI 왕국은 $N$개의 도시로 이루어진 왕국이며, 이 도시들에는 $1$부터 $N$까지의 번호가 붙어 있다. JOI 왕국에는 이 도시들을 연결하는 일방통행 고속도로가 $M$개 있으며, $1$부터 $M$까지의 번호가 붙어 있다. 고속도로 $i$ ($1 \le i \le M$)를 지나면 도시 $A_i$에서 도시 $B_i$로 이동할 수 있으며, 통행에 걸리는 시간은 $L_i$이다.

각각의 고속도로를 지날 때마다 통행료가 발생한다. 고속도로 $i$의 통행료는 가장 저렴할 때 $C_i$이지만, JOI 왕국의 노동자들은 모두 시간 외 노동을 싫어하기 때문에, 어떤 기준이 되는 시각 $0$에서 멀어질수록 통행료가 늘어난다. 구체적으로, 도시 $A_i$를 시각 $t$에 출발하여 고속도로 $i$를 통행한 경우, 통행료는 상수 $K$를 사용하여 $C_i + K \times |t|$로 표현된다. 단, $|t|$는 $t$의 절댓값을 나타낸다.

도시 $1$에 살고 있는 당신은 친구가 사는 도시 $N$으로 놀러 갈 계획을 세우고 있다. 당신은 고속도로를 지나 도시 $1$에서 도시 $N$까지 이동하고 싶으므로, 우선 그것이 가능한지 확인하고, 가능하다면 통행료의 총합이 최소 얼마가 되는지도 구하고 싶다. 단, 이동 경로나 각 도시를 출발하는 타이밍은 자유롭게 정할 수 있다. 특히, 도시 $1$을 음의 시각에 출발하거나, 고속도로를 통행하지 않고 어느 도시에 머물러 있는 시간이 있어도 된다.

고속도로의 정보 및 상수 $K$가 주어졌을 때, 고속도로를 지나 도시 $1$에서 도시 $N$까지 이동하는 것이 가능한지 판정하고, 가능한 경우에는 통행료의 총합의 최솟값을 구하는 프로그램을 작성하라.

한편, 이 문제의 제약 조건 아래에서는 고속도로를 지나 도시 $1$에서 도시 $N$까지 이동하는 것이 가능한 경우, 통행료의 총합의 최솟값은 반드시 정수가 됨을 증명할 수 있다.

제약 조건

  • $2 \le N \le 4\,000$.
  • $1 \le M \le 8\,000$.
  • $0 \le K \le 100\,000$.
  • $1 \le A_i \le N$ ($1 \le i \le M$).
  • $1 \le B_i \le N$ ($1 \le i \le M$).
  • $A_i \neq B_i$ ($1 \le i \le M$).
  • $1 \le L_i \le 1\,000\,000$ ($1 \le i \le M$).
  • $0 \le C_i \le 10^9$ ($1 \le i \le M$).
  • 입력되는 값은 모두 정수이다.

서브태스크

  1. ($9$점) $N \le 100$, $M \le 200$, $K = 0$.
  2. ($21$점) $N \le 100$, $M \le 200$, $L_i \le 20$ ($1 \le i \le M$).
  3. ($13$점) $N \le 100$, $M = N - 1$, $A_i = i$, $B_i = i + 1$ ($1 \le i \le M$).
  4. ($23$점) $N \le 100$, $M \le 200$이며, 다음 제약 조건을 만족한다.
    • $N$은 짝수, $\lfloor B_i / 2 \rfloor - \lfloor A_i / 2 \rfloor = 1$ ($1 \le i \le M$). 여기서 $\lfloor x \rfloor$는 $x$ 이하의 최대 정수를 나타낸다.
  5. ($16$점) $N \le 100$, $M \le 200$.
  6. ($11$점) $N \le 1\,500$, $M \le 3\,000$.
  7. ($7$점) 추가 제약 조건 없음.

입력

입력은 다음 형식으로 주어진다.

N M K
A_1 B_1 L_1 C_1
A_2 B_2 L_2 C_2
:
A_M B_M L_M C_M

출력

고속도로를 지나 도시 $1$에서 도시 $N$까지 이동하는 것이 불가능한 경우에는 -1을 출력하라. 가능한 경우에는 통행료의 총합의 최솟값을 나타내는 정수를 $1$줄로 출력하라.

입출력 예제 1

4 4 2
1 2 3 2
1 3 1 10
2 3 1 4
3 4 5 3
15

JOI 왕국의 도시와 도로의 모습을 그림으로 나타내면 다음과 같다. 원은 도시를, 화살표는 도로를 나타내며, 각 도로 옆에는 그 도로의 $L_i$와 $C_i$의 값이 이 순서대로 적혀 있다. 또한 원 안에 적힌 숫자는 그 도시의 번호를 나타낸다.

problem_23947_1be471b578508932fc741bdecdff46c1.png

다음과 같이 이동하면 통행료의 총합이 $15$가 된다.

  • 시각 $-1$ : 도시 $1$을 출발하여 도시 $3$으로 향한다. 통행료가 $10 + 2 \times |-1| = 12$ 든다.
  • 시각 $0$ : 도시 $3$에 도착하여 곧바로 도시 $4$로 향한다. 통행료가 $3 + 2 \times |0| = 3$ 든다.
  • 시각 $5$ : 도시 $4$에 도착한다.

통행료의 총합이 $15$보다 작아지는 이동 방법은 존재하지 않으므로 $15$를 출력한다.

이 입력 예제는 서브태스크 $2, 5, 6, 7$의 제약 조건을 만족한다.

입출력 예제 2

4 4 0
1 2 3 2
1 3 1 10
2 3 1 4
3 4 5 3
9

입력 예제 $1$과는 $K$의 값만 다르다.

다음과 같이 이동하면 통행료의 총합이 $9$가 된다.

  • 시각 $-3$ : 도시 $1$을 출발하여 도시 $2$로 향한다. 통행료가 $2 + 0 \times |-3| = 2$ 든다.
  • 시각 $0$ : 도시 $2$에 도착하여 곧바로 도시 $3$으로 향한다. 통행료가 $4 + 0 \times |0| = 4$ 든다.
  • 시각 $1$ : 도시 $3$에 도착하여 그대로 도시 $3$에 머무른다.
  • 시각 $3$ : 도시 $3$을 출발하여 도시 $4$로 향한다. 통행료가 $3 + 0 \times |3| = 3$ 든다.
  • 시각 $8$ : 도시 $4$에 도착한다.

통행료의 총합이 $9$보다 작아지는 이동 방법은 존재하지 않으므로 $9$를 출력한다.

이 입력 예제는 서브태스크 $1, 2, 5, 6, 7$의 제약 조건을 만족한다.

입출력 예제 3

2 1 10
2 1 4 7
-1

고속도로를 지나 도시 $1$에서 도시 $2$까지 이동하는 것은 불가능하므로 -1을 출력한다.

이 입력 예제는 서브태스크 $2, 5, 6, 7$의 제약 조건을 만족한다.

입출력 예제 4

4 3 5
1 2 3 1
2 3 1 10
3 4 7 6
37

이 입력 예제는 서브태스크 $2, 3, 5, 6, 7$의 제약 조건을 만족한다.

입출력 예제 5

8 8 2
1 2 1 5
5 6 3 1
2 4 10 18
3 5 3 1
1 3 4 2
5 6 2 2
2 5 2 3
6 8 1 1
25

같은 $(A_i, B_i)$ 쌍을 가지는 여러 개의 도로가 존재할 수도 있다.

이 입력 예제는 서브태스크 $2, 4, 5, 6, 7$의 제약 조건을 만족한다.

입출력 예제 6

6 10 100000
4 2 212037 752027141
2 5 667097 1571491
2 1 769275 576006950
1 2 711969 526189398
5 3 733555 206320177
3 4 364807 802102091
1 4 467240 183184247
3 5 44994 15991843
5 3 613192 782356546
4 6 832593 639529758
47546714005

이 입력 예제는 서브태스크 $5, 6, 7$의 제약 조건을 만족한다.

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.