package 백준.자바.네트워크연결_1922;
import java.io.*;
import java.util.*;
public class Main {
class Node{
int s;
int e;
int dist;
public Node(int s, int e, int dist) {
this.s = s;
this.e = e;
this.dist = dist;
}
}
private int[] parent;
void union(int a, int b){
int x = find(a);
int y = find(b);
if(x != y){
parent[y]= x;
}
}
int find(int x){
if(x == parent[x])
return x;
return parent[x] = find(parent[x]);
}
public void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine());
List<Node> edges = new ArrayList<>();
for(int i = 0; i < M; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
edges.add(new Node(a, b, c));
}
parent = new int[N+1];
for(int i = 0; i < N+1; i++)
parent[i] = i;
Collections.sort(edges, (o1, o2)-> Integer.compare(o1.dist, o2.dist));
int cost = 0;
for(int i = 0; i < edges.size(); i++){
Node curNode = edges.get(i);
if(find(curNode.s) != find(curNode.e)) {
union(curNode.s, curNode.e);
cost += curNode.dist;
}
}
System.out.println(cost);
}
public static void main(String[] args) throws Exception{
new Main().solution();
}
}
'문제풀이 > 백준' 카테고리의 다른 글
도서관 1461 Java (1) | 2024.02.12 |
---|---|
소수의 연속합 1644 Java (0) | 2024.02.09 |
최소비용구하기2 11779 Java (0) | 2024.02.08 |
친구네트워크 4195 Java (1) | 2024.02.07 |
다리만들기2 17472 Java (1) | 2024.02.07 |