From a3fb63a59023964cb7608a96bba8509b550e6a2e Mon Sep 17 00:00:00 2001 From: MadCom96 <70102600+MadCom96@users.noreply.github.com> Date: Mon, 30 Oct 2023 19:28:03 +0900 Subject: [PATCH] [solved] boj22865 --- ...\354\236\245\353\250\274\352\263\263.java" | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 "HwangJinHa/BOJ/20231026 - 20231030 [ \355\203\234\355\230\270\354\235\230 \354\236\245\354\240\220\354\235\264 \353\255\224 \354\247\200 \354\225\214\354\225\204? ]/boj22865_\352\260\200\354\236\245\353\250\274\352\263\263.java" diff --git "a/HwangJinHa/BOJ/20231026 - 20231030 [ \355\203\234\355\230\270\354\235\230 \354\236\245\354\240\220\354\235\264 \353\255\224 \354\247\200 \354\225\214\354\225\204? ]/boj22865_\352\260\200\354\236\245\353\250\274\352\263\263.java" "b/HwangJinHa/BOJ/20231026 - 20231030 [ \355\203\234\355\230\270\354\235\230 \354\236\245\354\240\220\354\235\264 \353\255\224 \354\247\200 \354\225\214\354\225\204? ]/boj22865_\352\260\200\354\236\245\353\250\274\352\263\263.java" new file mode 100644 index 00000000..57bfc7d1 --- /dev/null +++ "b/HwangJinHa/BOJ/20231026 - 20231030 [ \355\203\234\355\230\270\354\235\230 \354\236\245\354\240\220\354\235\264 \353\255\224 \354\247\200 \354\225\214\354\225\204? ]/boj22865_\352\260\200\354\236\245\353\250\274\352\263\263.java" @@ -0,0 +1,100 @@ +package study10월5주차월; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.PriorityQueue; +import java.util.StringTokenizer; + +public class boj22865_가장먼곳 { + static int n, a, b, c; + static int m; + + static int ri = 0; + static int[][] results; + static ArrayList[] graph; + + static PriorityQueue closest = new PriorityQueue<>((a, b) -> { + if (a[1] == b[1]) { + if (a[0] < b[0]) { + return -1; + } + else { + return 1; + } + } + else if (a[1] < b[1]) { + return -1; + } + else { + return 1; + } + }); + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + + n = Integer.parseInt(br.readLine()); + st = new StringTokenizer(br.readLine()); + a = Integer.parseInt(st.nextToken()) - 1; + b = Integer.parseInt(st.nextToken()) - 1; + c = Integer.parseInt(st.nextToken()) - 1; + results = new int[3][n]; + graph = new ArrayList[n]; + for (int i = 0; i < n; i++) { + graph[i] = new ArrayList<>(); + } + + m = Integer.parseInt(br.readLine()); + for (int i = 0; i < m; i++) { + st = new StringTokenizer(br.readLine()); + int d = Integer.parseInt(st.nextToken()) - 1; + int e = Integer.parseInt(st.nextToken()) - 1; + int l = Integer.parseInt(st.nextToken()); + + graph[d].add(new int[] {e, l}); + graph[e].add(new int[] {d, l}); + } + dijk(a); + dijk(b); + dijk(c); + int ansidx = -1; + int anslen = Integer.MIN_VALUE; + for (int i = 0; i < n; i++) { + if (i == a || i == b || i == c) + continue; + int len = Integer.MAX_VALUE; + for (int rr = 0; rr < 3; rr++) + len = Math.min(len, results[rr][i]); + if (len > anslen) { + ansidx = i; + anslen = len; + } + } + System.out.println(ansidx + 1); + } + + static void dijk(int node) { + int[] di = results[ri++]; + Arrays.fill(di, Integer.MAX_VALUE); + di[node] = 0; + closest.add(new int[] {node, 0}); + + boolean[] fixed = new boolean[n]; + while (!closest.isEmpty()) { + int[] next = closest.poll(); + if (fixed[next[0]]) + continue; + fixed[next[0]] = true; + for (int[] nn : graph[next[0]]) { + int len = di[next[0]] + nn[1]; + if (len < di[nn[0]]) { + di[nn[0]] = len; + closest.add(new int[] {nn[0], len}); + } + } + } + } +} \ No newline at end of file