[백준] 1197. 최소 스패닝 트리 (크루스칼 알고리즘, MST)
728x90
반응형
import java.util.PriorityQueue;
import java.util.Scanner;
class edge implements Comparable<edge>{
int s;
int e;
int w;
public edge(int s, int e, int w) {
super();
this.s = s;
this.e = e;
this.w = w;
}
@Override
public int compareTo(edge o) {
return this.w-o.w;
}
}
public class Main {
static int v,e;
static int[] parent;
static PriorityQueue<edge> pq=new PriorityQueue<>();
static int result=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
v=sc.nextInt();
e=sc.nextInt();
parent=new int[v+1];
for (int i = 1; i <= v; i++) {
parent[i]=i;
}
for (int i = 0; i < e; i++) {
pq.add(new edge(sc.nextInt(),sc.nextInt(),sc.nextInt()));
}
for (int i = 0; i < e; i++) {
edge a=pq.poll(); // 간선의 가중치 낮은 순으로 합침
union(a.s,a.e,a.w);
}
System.out.println(result);
}
private static int find(int x) {
if(x==parent[x])return x;
return parent[x]=find(parent[x]);
}
private static void union(int x,int y,int w) {
x=find(x);
y=find(y);
if(x!=y) {//사이클이 아닌 경우만 union
parent[x]=y;
result+=w;
}
}
}
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 1463. 1로 만들기 (dp) (0) | 2021.03.23 |
---|---|
[백준] 1753번. 최단 경로 (다익스트라, java) (0) | 2021.03.22 |
[백준] 16562번. 친구비 (java, union-find) (0) | 2021.03.18 |
[백준] 13300번 방 배정 (java) (0) | 2021.02.26 |
[백준] 2804번 크로스워드 만들기 (java) (0) | 2021.02.26 |
TAGS.