알고리즘

백준 1197번 최소 스패닝 트리 (JAVA)

박카스마시며코딩 2023. 2. 20. 12:11

https://www.acmicpc.net/status?user_id=nodays&problem_id=1197&from_mine=1 

 

채점 현황

 

www.acmicpc.net

 

 

package BOJ.mst;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_1197_2 {
    private static final int BLOCK = 1_000_001;
    private static class Edge{
        int start;
        int end;
        int value;

        public Edge(int start, int end, int value) {
            this.start = start;
            this.end = end;
            this.value = value;
        }
    }
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        Function<String,Integer> stoi = Integer::parseInt;
        int v = stoi.apply(st.nextToken());
        int e = stoi.apply(st.nextToken());
        List<Edge> edges = new LinkedList<>();
        for(int i = 0 ; i < e; i++){
            st = new StringTokenizer(br.readLine());
            int a = stoi.apply(st.nextToken());
            int b = stoi.apply(st.nextToken());
            int c = stoi.apply(st.nextToken());
            edges.add(new Edge(a,b,c));
        }
        edges.sort((v1,v2)->{
            return v1.value - v2.value;
        });
        int[] parent = new int[v+1];
        for(int i = 1 ; i  <= v; i++){
            parent[i] = i;
        }
        int result = 0;
        for(Edge edge : edges){
            if(union(edge.start,edge.end,parent)){
                result += edge.value;
            }
        }
        System.out.println(result);
    }
    private static int findParent(int num,int[] parent){
        if(num == parent[num]){
            return num;
        }
        return parent[num] = findParent(parent[num],parent);
    }
    private static boolean union(int a, int b, int[] parent){
        int aParent = findParent(a,parent);
        int bParent = findParent(b,parent);
        if(aParent == bParent){
            return false;
        }
        parent[aParent] = bParent;
        return true;
    }
}