Skip to content

Commit a34dc2e

Browse files
authored
[20250820] BOJ / G4 / 가운데에서 만나 / 이준희
1 parent 1664d1e commit a34dc2e

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
7+
static int n, m, k;
8+
static int[][] map;
9+
static final int INF = 987654321;
10+
11+
public static void main(String[] args) throws Exception {
12+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13+
StringTokenizer st = new StringTokenizer(br.readLine());
14+
15+
n = Integer.parseInt(st.nextToken());
16+
m = Integer.parseInt(st.nextToken());
17+
18+
map = new int[n][n];
19+
for (int i = 0; i < n; i++) {
20+
Arrays.fill(map[i], INF);
21+
map[i][i] = 0;
22+
}
23+
24+
for (int i = 0; i < m; i++) {
25+
st = new StringTokenizer(br.readLine());
26+
int from = Integer.parseInt(st.nextToken()) - 1;
27+
int to = Integer.parseInt(st.nextToken()) - 1;
28+
int cost = Integer.parseInt(st.nextToken());
29+
if (cost < map[from][to]) map[from][to] = cost;
30+
}
31+
32+
for (int k = 0; k < n; k++) {
33+
for (int i = 0; i < n; i++) {
34+
if (map[i][k] == INF) continue;
35+
for (int j = 0; j < n; j++) {
36+
if (map[k][j] == INF) continue;
37+
map[i][j] = Math.min(map[i][j], map[i][k] + map[k][j]);
38+
}
39+
}
40+
}
41+
42+
k = Integer.parseInt(br.readLine());
43+
int[] friend = new int[k];
44+
st = new StringTokenizer(br.readLine());
45+
for (int i = 0; i < k; i++) {
46+
friend[i] = Integer.parseInt(st.nextToken()) - 1;
47+
}
48+
49+
int best = INF;
50+
ArrayList<Integer> ans = new ArrayList<>();
51+
52+
for (int v = 0; v < n; v++) {
53+
int worst = 0;
54+
boolean ok = true;
55+
for (int s : friend) {
56+
if (map[s][v] == INF || map[v][s] == INF) {
57+
ok = false;
58+
break;
59+
}
60+
worst = Math.max(worst, map[s][v] + map[v][s]);
61+
}
62+
if (!ok) continue;
63+
64+
if (worst < best) {
65+
best = worst;
66+
ans.clear();
67+
ans.add(v + 1);
68+
} else if (worst == best) {
69+
ans.add(v + 1);
70+
}
71+
}
72+
73+
StringBuilder sb = new StringBuilder();
74+
for (int i = 0; i < ans.size(); i++) {
75+
if (i > 0) sb.append(' ');
76+
sb.append(ans.get(i));
77+
}
78+
System.out.println(sb.toString());
79+
}
80+
}
81+
82+
```

0 commit comments

Comments
 (0)