• 문제 링크
1647번: 도시 분할 계획
첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static int[] parent;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
PriorityQueue<Edge> pq = new PriorityQueue<>((o1, o2) -> o1.weight - o2.weight);
parent = new int[n + 1];
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int src = Integer.parseInt(st.nextToken());
int dest = Integer.parseInt(st.nextToken());
int weight = Integer.parseInt(st.nextToken());
pq.offer(new Edge(src, dest, weight));
}
for (int i = 1; i <= n; i++)
parent[i] = i;
int res = 0;
int size = 0;
while (size < n - 2) {
Edge edge = pq.poll();
if (find(edge.src) != find(edge.dest)) {
union(edge.src, edge.dest);
res += edge.weight;
size++;
}
}
bw.write(String.valueOf(res));
bw.flush();
}
private static int find(int node) {
if (node == parent[node])
return node;
return parent[node] = find(parent[node]);
}
private static void union(int src, int dest) {
src = find(src);
dest = find(dest);
if (src != dest)
parent[dest] = src;
}
private static class Edge {
int src, dest, weight;
public Edge(int src, int dest, int weight) {
this.src = src;
this.dest = dest;
this.weight = weight;
}
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 4949 균형잡힌 세상 - Data Structure / Java (0) | 2022.11.02 |
---|---|
[백준] 10773 제로 - Data Structure / Java (0) | 2022.11.01 |
[백준] 1613 역사 - Graph Theory / Java (0) | 2022.10.30 |
[백준] 1956 운동 - Graph Theory / Java (0) | 2022.10.29 |
[백준] 1504 특정한 최단 경로 - Graph Theory / Java (0) | 2022.10.28 |
댓글