Skip to content

Commit 2d8fc94

Browse files
authored
Merge pull request #1120 from AlgorithmWithGod/Seol-JY
[20251014] BOJ / P5 / 밤편지 / 설진영
2 parents 22309dd + c5be325 commit 2d8fc94

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
StringTokenizer st = new StringTokenizer(br.readLine());
9+
10+
int N = Integer.parseInt(st.nextToken());
11+
int Q = Integer.parseInt(st.nextToken());
12+
13+
int[][] dist = new int[N + 1][N + 1];
14+
15+
for (int i = 1; i <= N; i++) {
16+
st = new StringTokenizer(br.readLine());
17+
for (int j = 1; j <= N; j++) {
18+
dist[i][j] = Integer.parseInt(st.nextToken());
19+
}
20+
}
21+
22+
int[][][] dp = new int[N + 2][N + 1][N + 1];
23+
24+
for (int k = 0; k <= N + 1; k++) {
25+
for (int i = 1; i <= N; i++) {
26+
Arrays.fill(dp[k][i], Integer.MAX_VALUE / 2);
27+
}
28+
}
29+
30+
for (int i = 1; i <= N; i++) {
31+
for (int j = 1; j <= N; j++) {
32+
if (dist[i][j] > 0) {
33+
dp[0][i][j] = dist[i][j];
34+
}
35+
if (i == j) {
36+
dp[0][i][j] = 0;
37+
}
38+
}
39+
}
40+
41+
for (int k = 1; k <= N; k++) {
42+
for (int i = 1; i <= N; i++) {
43+
for (int j = 1; j <= N; j++) {
44+
dp[k][i][j] = dp[k - 1][i][j];
45+
if (i != k && j != k) {
46+
dp[k][i][j] = Math.min(dp[k][i][j],
47+
dp[k - 1][i][k] + dp[k - 1][k][j]);
48+
}
49+
}
50+
}
51+
}
52+
53+
StringBuilder sb = new StringBuilder();
54+
55+
for (int q = 0; q < Q; q++) {
56+
st = new StringTokenizer(br.readLine());
57+
int C = Integer.parseInt(st.nextToken());
58+
int s = Integer.parseInt(st.nextToken());
59+
int e = Integer.parseInt(st.nextToken());
60+
61+
int result = Integer.MAX_VALUE / 2;
62+
63+
if (C - 1 >= N) {
64+
result = dp[N][s][e];
65+
} else if (C - 1 >= 1) {
66+
result = dp[C - 1][s][e];
67+
} else {
68+
result = dp[0][s][e];
69+
}
70+
71+
if (result >= Integer.MAX_VALUE / 2) {
72+
sb.append("-1\n");
73+
} else {
74+
sb.append(result).append("\n");
75+
}
76+
}
77+
78+
System.out.print(sb);
79+
}
80+
}
81+
```

0 commit comments

Comments
 (0)