From 1f73f51878ca8fe1df152d95de60e5f5cf453935 Mon Sep 17 00:00:00 2001 From: LiiNi-coder <97495437+LiiNi-coder@users.noreply.github.com> Date: Sun, 31 Aug 2025 23:52:09 +0900 Subject: [PATCH] =?UTF-8?q?[20250831]=20BOJ=20/=20G5=20/=20=EB=85=B8?= =?UTF-8?q?=EB=93=9C=EC=82=AC=EC=9D=B4=EC=9D=98=20=EA=B1=B0=EB=A6=AC=20/?= =?UTF-8?q?=20=EC=9D=B4=EC=9D=B8=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\354\235\230 \352\261\260\353\246\254.md" | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 "LiiNi-coder/202508/31 BOJ \353\205\270\353\223\234\354\202\254\354\235\264\354\235\230 \352\261\260\353\246\254.md" diff --git "a/LiiNi-coder/202508/31 BOJ \353\205\270\353\223\234\354\202\254\354\235\264\354\235\230 \352\261\260\353\246\254.md" "b/LiiNi-coder/202508/31 BOJ \353\205\270\353\223\234\354\202\254\354\235\264\354\235\230 \352\261\260\353\246\254.md" new file mode 100644 index 00000000..7a451142 --- /dev/null +++ "b/LiiNi-coder/202508/31 BOJ \353\205\270\353\223\234\354\202\254\354\235\264\354\235\230 \352\261\260\353\246\254.md" @@ -0,0 +1,87 @@ +```java +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.PriorityQueue; +import java.util.StringTokenizer; + +public class Main { + private static BufferedReader Br; + private static BufferedWriter Bw; + private static StringBuilder Sb; + private static int N; + private static int M; + private static List[] Graph; + + private static class Node implements Comparable { + int v; + int w; + public Node(int v, int w) { + this.v = v; + this.w = w; + } + @Override + public int compareTo(Node o) { + return this.w - o.w; + } + } + + public static void main(String[] args) throws IOException { + Br = new BufferedReader(new InputStreamReader(System.in)); + Bw = new BufferedWriter(new OutputStreamWriter(System.out)); + Sb = new StringBuilder(); + StringTokenizer st = new StringTokenizer(Br.readLine()); + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + Graph = new ArrayList[N + 1]; + for (int i = 1; i <= N; i++) { + Graph[i] = new ArrayList<>(); + } + for (int i = 0; i < N - 1; i++) { + st = new StringTokenizer(Br.readLine()); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + int w = Integer.parseInt(st.nextToken()); + Graph[a].add(new Node(b, w)); + Graph[b].add(new Node(a, w)); + } + for (int i = 0; i < M; i++) { + st = new StringTokenizer(Br.readLine()); + int s = Integer.parseInt(st.nextToken()); + int e = Integer.parseInt(st.nextToken()); + Sb.append(dijkstra(s, e)).append("\n"); + } + Bw.write(Sb.toString()); + Bw.flush(); + Bw.close(); + Br.close(); + } + + private static int dijkstra(int start, int end) { + int[] dist = new int[N + 1]; + for (int i = 1; i <= N; i++) + dist[i] = Integer.MAX_VALUE; + PriorityQueue pq = new PriorityQueue<>(); + pq.add(new Node(start, 0)); + dist[start] = 0; + while (!pq.isEmpty()) { + Node cur = pq.poll(); + if (dist[cur.v] < cur.w) continue; + if (cur.v == end) return cur.w; + + for (Node next : Graph[cur.v]) { + if (dist[next.v] > cur.w + next.w) { + dist[next.v] = cur.w + next.w; + pq.add(new Node(next.v, dist[next.v])); + } + } + } + return -1; + } +} + +```