백준_1414 불우이웃돕기 (mst)Algorithm/Algorithm 문제2024. 3. 4. 18:16
Table of Contents
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
public class BJ_1414_불우이웃돕기 {
static int[] parent;
static PriorityQueue<Edge> edges;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int i;
parent = new int[n];
for (i=0; i<n; i++) {
parent[i] = i;
}
edges = new PriorityQueue<>(new Comparator<Edge>() {
@Override
public int compare(Edge o1, Edge o2) {
return o1.value - o2.value;
}
});
String temp;
int j, length;
int totalLength = 0;
char tempChar;
for (i=0; i<n; i++) {
temp = br.readLine();
for (j=0; j<n; j++) {
tempChar = temp.charAt(j);
if (tempChar != '0') {
if (tempChar <= 'z' && tempChar >= 'a') {
length = tempChar - 96;
} else {
length = tempChar - 38;
}
totalLength += length;
if (i!=j) {
edges.add(new Edge(i, j, length));
}
}
}
}
int useEdge = 0;
int mstLength = 0;
Edge nowEdge;
while (useEdge < n - 1 && !edges.isEmpty()) {
nowEdge = edges.poll();
if (find(nowEdge.a) != find(nowEdge.b)) {
union(nowEdge.a, nowEdge.b);
mstLength += nowEdge.value;
useEdge++;
}
}
if (useEdge != n-1) {
System.out.println(new StringBuilder().append(-1));
} else {
System.out.println(new StringBuilder().append(totalLength - mstLength));
}
}
static int find(int a) {
if (parent[a] == a) {
return a;
} else {
int temp = find(parent[a]);
parent[a] = temp;
return temp;
}
}
static void union(int a, int b) {
a = find(a);
b = find(b);
if (a != b) {
parent[b] = a;
}
}
static class Edge {
int a;
int b;
int value;
public Edge(int a, int b, int value) {
this.a = a;
this.b = b;
this.value = value;
}
}
}
'Algorithm > Algorithm 문제' 카테고리의 다른 글
백준_1068 트리 (트리, dfs) (0) | 2024.03.06 |
---|---|
백준_11725 트리의 부모 찾기 (트리, dfs) (0) | 2024.03.05 |
백준_17472_다리 만들기 2 (mst&bfs) (0) | 2024.03.02 |
백준_1197_최소스패닝트리 (mst) (0) | 2024.03.02 |
백준_1389 케빈 베이컨의 6단계 법칙 (플로이드-워셜) (0) | 2024.02.29 |
@kjyyjk :: 녕의 학습 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!