Skip to content

Commit d8453af

Browse files
authored
Merge pull request #1165 from AlgorithmWithGod/JHLEE325
[20251019] BOJ / G4 / 비밀 모임 / 이준희
2 parents 587ea93 + f4bf701 commit d8453af

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
7+
static class Node implements Comparable<Node> {
8+
int to, cost;
9+
10+
public Node(int t, int c) {
11+
this.to = t;
12+
this.cost = c;
13+
}
14+
15+
@Override
16+
public int compareTo(Node o) {
17+
return this.cost - o.cost;
18+
}
19+
}
20+
21+
static final int INF = 987654321;
22+
static List<Node>[] graph;
23+
static int N, M, K;
24+
static int[] friends;
25+
26+
public static void main(String[] args) throws Exception {
27+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
28+
StringTokenizer st;
29+
30+
int T = Integer.parseInt(br.readLine());
31+
StringBuilder sb = new StringBuilder();
32+
33+
while (T-- > 0) {
34+
st = new StringTokenizer(br.readLine());
35+
N = Integer.parseInt(st.nextToken());
36+
M = Integer.parseInt(st.nextToken());
37+
38+
graph = new ArrayList[N + 1];
39+
for (int i = 1; i <= N; i++) graph[i] = new ArrayList<>();
40+
41+
for (int i = 0; i < M; i++) {
42+
st = new StringTokenizer(br.readLine());
43+
int a = Integer.parseInt(st.nextToken());
44+
int b = Integer.parseInt(st.nextToken());
45+
int d = Integer.parseInt(st.nextToken());
46+
graph[a].add(new Node(b, d));
47+
graph[b].add(new Node(a, d));
48+
}
49+
50+
K = Integer.parseInt(br.readLine());
51+
friends = new int[K];
52+
st = new StringTokenizer(br.readLine());
53+
for (int i = 0; i < K; i++) friends[i] = Integer.parseInt(st.nextToken());
54+
55+
int[][] dist = new int[K][N + 1];
56+
for (int i = 0; i < K; i++) {
57+
dist[i] = dijkstra(friends[i]);
58+
}
59+
60+
int minSum = INF;
61+
int room = 0;
62+
63+
for (int i = 1; i <= N; i++) {
64+
int total = 0;
65+
for (int j = 0; j < K; j++) {
66+
total += dist[j][i];
67+
}
68+
69+
if (total < minSum) {
70+
minSum = total;
71+
room = i;
72+
}
73+
}
74+
75+
sb.append(room).append('\n');
76+
}
77+
78+
System.out.print(sb.toString());
79+
}
80+
81+
public static int[] dijkstra(int start) {
82+
boolean[] check = new boolean[N + 1];
83+
int[] dist = new int[N + 1];
84+
85+
Arrays.fill(dist, 987654321);
86+
dist[start] = 0;
87+
88+
PriorityQueue<Node> pq = new PriorityQueue<>();
89+
pq.offer(new Node(start, 0));
90+
91+
while (!pq.isEmpty()) {
92+
int cur = pq.poll().to;
93+
94+
if (check[cur])
95+
continue;
96+
check[cur] = true;
97+
98+
for (Node next : graph[cur]) {
99+
if (dist[next.to] > dist[cur] + next.cost) {
100+
dist[next.to] = dist[cur] + next.cost;
101+
pq.offer(new Node(next.to, dist[next.to]));
102+
}
103+
}
104+
}
105+
106+
return dist;
107+
}
108+
}```

0 commit comments

Comments
 (0)