From 52730395ef27dd7dc2d1def511fd87f5e4f8e2e9 Mon Sep 17 00:00:00 2001 From: Ukj0ng <90972240+Ukj0ng@users.noreply.github.com> Date: Wed, 20 Aug 2025 10:21:30 +0900 Subject: [PATCH] =?UTF-8?q?[20250820]=20BOJ=20/=20G4=20/=20=EA=B0=80?= =?UTF-8?q?=EC=9A=B4=EB=8D=B0=EC=97=90=EC=84=9C=20=EB=A7=8C=EB=82=98?= =?UTF-8?q?=EA=B8=B0=20/=20=ED=95=9C=EC=A2=85=EC=9A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4 \353\247\214\353\202\230\352\270\260.md" | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 "Ukj0ng/202508/20 BOJ G4 \352\260\200\354\232\264\353\215\260\354\227\220\354\204\234 \353\247\214\353\202\230\352\270\260.md" diff --git "a/Ukj0ng/202508/20 BOJ G4 \352\260\200\354\232\264\353\215\260\354\227\220\354\204\234 \353\247\214\353\202\230\352\270\260.md" "b/Ukj0ng/202508/20 BOJ G4 \352\260\200\354\232\264\353\215\260\354\227\220\354\204\234 \353\247\214\353\202\230\352\270\260.md" new file mode 100644 index 00000000..5257132a --- /dev/null +++ "b/Ukj0ng/202508/20 BOJ G4 \352\260\200\354\232\264\353\215\260\354\227\220\354\204\234 \353\247\214\353\202\230\352\270\260.md" @@ -0,0 +1,114 @@ +``` +import java.io.*; +import java.util.*; + +public class Main { + private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + private static List[] graph; + private static List answer; + private static int[][] dist; + private static int[] arr; + private static int N, M, K, min; + public static void main(String[] args) throws IOException { + init(); + for (int i = 1; i <= N; i++) { + dijkstra(i); + } + + for (int i = 1; i <= N; i++) { + int max = 0; + for (int idx = 1; idx <= K; idx++) { + int j = arr[idx]; + max = Math.max(max, dist[j][i] + dist[i][j]); + } + + if (max == min) { + answer.add(i); + } else if (max < min) { + min = max; + answer.clear(); + answer.add(i); + } + } + + Collections.sort(answer); + + for (int element : answer) { + bw.write(element + " "); + } + bw.flush(); + bw.close(); + br.close(); + } + + private static void init() throws IOException { + StringTokenizer st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + graph = new List[N + 1]; + answer = new ArrayList<>(); + + for (int i = 1; i <= N; i++) { + graph[i] = new ArrayList<>(); + } + + for (int i = 1; i <= M; i++) { + st = new StringTokenizer(br.readLine()); + int v = Integer.parseInt(st.nextToken()); + int u = Integer.parseInt(st.nextToken()); + int w = Integer.parseInt(st.nextToken()); + + graph[v].add(new Edge(u, w)); + } + + K = Integer.parseInt(br.readLine()); + arr = new int[K + 1]; + dist = new int[N + 1][N + 1]; + st = new StringTokenizer(br.readLine()); + for (int i = 1; i <= K; i++) { + arr[i] = Integer.parseInt(st.nextToken()); + } + min = Integer.MAX_VALUE - 10; + } + + private static void dijkstra(int start) { + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> Integer.compare(o1.cost ,o2.cost)); + int[] temp = new int[N + 1]; + Arrays.fill(temp, Integer.MAX_VALUE - 10); + temp[start] = 0; + pq.add(new Edge(start, 0)); + + while (!pq.isEmpty()) { + Edge current = pq.poll(); + + if (current.cost > temp[current.dest]) continue; + + for (Edge next : graph[current.dest]) { + int nDest = next.dest; + int nCost = current.cost + next.cost; + + if (nCost < temp[nDest]) { + temp[nDest] = nCost; + pq.add(new Edge(nDest, temp[nDest])); + } + } + } + + for (int i = 1; i <= N; i++) { + dist[start][i] = temp[i]; + } + } + + static class Edge { + int dest; + int cost; + Edge(int dest, int cost) { + this.dest = dest; + this.cost = cost; + } + } +} + +```