From 56623c53b79ffdd8bf79a1cc70f01b04f66e8401 Mon Sep 17 00:00:00 2001 From: lkhyun <102892446+lkhyun@users.noreply.github.com> Date: Sun, 4 May 2025 20:46:07 +0900 Subject: [PATCH] =?UTF-8?q?[20250504]=20BOJ=20/=20G4=20/=20=ED=8A=B9?= =?UTF-8?q?=EC=A0=95=ED=95=9C=20=EC=B5=9C=EB=8B=A8=20=EA=B2=BD=EB=A1=9C=20?= =?UTF-8?q?/=20=EC=9D=B4=EA=B0=95=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\353\213\250 \352\262\275\353\241\234.md" | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 "lkhyun/202505/04 BOJ G4 \355\212\271\354\240\225\355\225\234 \354\265\234\353\213\250 \352\262\275\353\241\234.md" diff --git "a/lkhyun/202505/04 BOJ G4 \355\212\271\354\240\225\355\225\234 \354\265\234\353\213\250 \352\262\275\353\241\234.md" "b/lkhyun/202505/04 BOJ G4 \355\212\271\354\240\225\355\225\234 \354\265\234\353\213\250 \352\262\275\353\241\234.md" new file mode 100644 index 00000000..52b5a3a0 --- /dev/null +++ "b/lkhyun/202505/04 BOJ G4 \355\212\271\354\240\225\355\225\234 \354\265\234\353\213\250 \352\262\275\353\241\234.md" @@ -0,0 +1,83 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + static class Node { + int to,cost; + Node(int to, int cost) { + this.to = to; + this.cost = cost; + } + } + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + static StringTokenizer st; + static int N,E; + static List[] adjList; + static int v1,v2; + static int MAX = Integer.MAX_VALUE; + static int min = -1; + + public static void main(String[] args) throws Exception { + st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + E = Integer.parseInt(st.nextToken()); + adjList = new ArrayList[N+1]; + for (int i = 1; i <= N; i++) { + adjList[i] = new ArrayList<>(); + } + for (int i = 0; i < E; i++) { + st = new StringTokenizer(br.readLine()); + int from = Integer.parseInt(st.nextToken()); + int to = Integer.parseInt(st.nextToken()); + int cost = Integer.parseInt(st.nextToken()); + adjList[from].add(new Node(to, cost)); + adjList[to].add(new Node(from, cost)); + } + st = new StringTokenizer(br.readLine()); + v1 = Integer.parseInt(st.nextToken()); + v2 = Integer.parseInt(st.nextToken()); + int[][] dist = new int[3][N+1]; + dijkstra(1,dist[0]); + dijkstra(v1,dist[1]); + dijkstra(v2,dist[2]); + + boolean flag1 = true; + boolean flag2 = true; + if(dist[0][v1] == MAX || dist[1][v2] == MAX || dist[2][N] == MAX) flag1 = false; + if(dist[0][v2] == MAX || dist[2][v1] == MAX || dist[1][N] == MAX) flag2 = false; + if(flag1 && flag2){ + min = Math.min(dist[0][v1] + dist[1][v2] + dist[2][N],dist[0][v2] + dist[2][v1] + dist[1][N]); + }else if(flag1){ + min = dist[0][v1] + dist[1][v2] + dist[2][N]; + }else if(flag2){ + min = dist[0][v2] + dist[2][v1] + dist[1][N]; + } + bw.write(min + ""); + bw.close(); + } + public static void dijkstra(int start , int[] dist) { + PriorityQueue pq = new PriorityQueue<>((a,b) -> a.cost - b.cost); + pq.add(new Node(start,0)); + Arrays.fill(dist,MAX); + dist[start] = 0; + + while (!pq.isEmpty()) { + Node cur = pq.poll(); + + if(cur.cost > dist[cur.to]) { + continue; + } + for(Node n : adjList[cur.to]){ + int newDist = dist[cur.to] + n.cost; + if(newDist < dist[n.to]) { + dist[n.to] = newDist; + pq.add(new Node(n.to,newDist)); + } + } + } + } + +} +```