From 5740cfd89fa805bea0d524e4f1e56f5ef92bad36 Mon Sep 17 00:00:00 2001 From: longrunpc Date: Sat, 11 Apr 2026 14:42:07 +0900 Subject: [PATCH] =?UTF-8?q?Solve(MST):=20BOJ=201414=20"=EB=B6=88=EC=9A=B0?= =?UTF-8?q?=EC=9D=B4=EC=9B=83=EB=8F=95=EA=B8=B0"=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- boj/solved/mst/1414/Main.java | 92 +++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 boj/solved/mst/1414/Main.java diff --git a/boj/solved/mst/1414/Main.java b/boj/solved/mst/1414/Main.java new file mode 100644 index 0000000..5b990b4 --- /dev/null +++ b/boj/solved/mst/1414/Main.java @@ -0,0 +1,92 @@ +import java.io.*; +import java.util.*; + +class Main { + static int n; + static class Node{ + int start; + int end; + int w; + public Node(int start, int end, int w) { + this.start = start; + this.end = end; + this.w = w; + } + } + static PriorityQueue nodes = new PriorityQueue<>(Comparator.comparing(a -> a.w)); + static int[] parents; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + n = Integer.parseInt(br.readLine()); + + parents = new int[n+1]; + for(int i = 0;i<=n;i++) { + parents[i] = i; + } + + int totalLen = 0; + for(int i = 1;i<=n;i++) { + char[] tmp = br.readLine().toCharArray(); + for(int j = 1;j<=n;j++) { + if (tmp[j-1] == '0') { + continue; + } + if (tmp[j-1] >= 'A' && tmp[j-1] <= 'Z') { + int w = (int)(tmp[j-1] - 'A') + 27; + nodes.add(new Node(i, j, w)); + totalLen += w; + } + else { + int w = (int)(tmp[j-1] - 'a' + 1); + nodes.add(new Node(i, j, w)); + totalLen += w; + } + } + } + + int res = 0; + while(!nodes.isEmpty()) { + Node node = nodes.poll(); + if(find(node.start) == find(node.end)) { + continue; + } + union(node.start, node.end); + res += node.w; + } + + int tmp = find(1); + boolean isConnected = true; + for(int i = 2;i<=n;i++) { + if (find(i) != tmp) { + isConnected = false; + break; + } + } + + if(isConnected) { + System.out.println(totalLen - res); + } + else { + System.out.println(-1); + } + } + + public static int find(int node) { + if(parents[node] == node) { + return node; + } + return parents[node] = find(parents[node]); + } + + public static void union(int a, int b) { + int aParent = find(a); + int bParent = find(b); + + parents[aParent] = bParent; + } +} + +// 1 : 1 2 3 +// 2 : 4 5 6 +// 3 : 7 8 9 \ No newline at end of file