카테고리 없음
[BAEKJOON] 1922. 네트워크 연결
코드와이
2021. 8. 3. 23:42
Kruskal
문제링크
https://www.acmicpc.net/problem/1922
1922번: 네트워크 연결
이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다.
www.acmicpc.net
package acmicpc.Gold4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class 네트워크_연결 {
static int n, e, parents[];
static class Point implements Comparable<Point>{
int f, t, num;
public Point(int f, int t, int num) {
super();
this.f = f;
this.t = t;
this.num = num;
}
@Override
public int compareTo(Point o) {
return num > o.num ? 1 : -1;
}
}
static PriorityQueue<Point> pq = new PriorityQueue<>();
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n = Integer.parseInt(br.readLine());
e = Integer.parseInt(br.readLine());
parents = new int[n+1];
for(int i = 0 ; i < e ; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
pq.add(new Point(a,b,c));
}
make();
int ans = 0;
while(!pq.isEmpty()) {
Point q = pq.poll();
int f = findSet(q.f);
int t = findSet(q.t);
if(f == t) continue;
union(f, t);
ans += q.num;
}
System.out.println(ans);
}
public static void make() {
for(int i = 1 ; i <= n ; i++) {
parents[i] = i;
}
}
public static int findSet(int x) {
if(x == parents[x]) return x;
return parents[x] = findSet(parents[x]);
}
public static boolean union(int a, int b) {
int aRoot = parents[a];
int bRoot = parents[b];
if(aRoot == bRoot) return true;
parents[aRoot] = bRoot;
return false;
}
}