1 ๋ถ„ ์†Œ์š”

๐Ÿ“ [G4_1197] ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

    static class Edge implements Comparable<Edge>{
        int from;
        int to;
        int weight;

        public Edge(int from, int to, int weight) {
            super();
            this.from = from;
            this.to = to;
            this.weight = weight;
        }

		// ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        @Override
        public int compareTo(Edge o) {
            return o.weight >= this.weight ? -1:1;
        }
    }

    static int N;
    static int[] parents;
    static Edge[] edgeList;

    // ๋‹จ์œ„ ์ง‘ํ•ฉ ์ƒ์„ฑ
    public static void makeSet(){
        parents = new int[N];
        // ์ž์‹ ์˜ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ์„ธํŒ…
        for(int i=0; i<N; i++){
            parents[i]= i;
        }
    }

    // a์˜ ์ง‘ํ•ฉ ์ฐพ๊ธฐ : a์˜ ๋Œ€ํ‘œ์ž ์ฐพ๊ธฐ
    public static int findSet(int a){
        if(a == parents[a]) return a;
        // ๋‚˜์˜ ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ์˜ .. ๋ฅผ ์ฐพ์œผ๋Ÿฌ ๊ฐ„๋‹ค
        // path compression
        return parents[a] = findSet(parents[a]);
    }

    // a,b ๋‘ ์ง‘ํ•ฉ ํ•ฉ์น˜๊ธฐ
    public static boolean union(int a, int b){
        int aRoot = findSet(a);
        int bRoot = findSet(b);
        // ๋งŒ์•ฝ ๊ฐ™์œผ๋ฉด ํ•ฉ์น  ํ•„์š”๊ฐ€ ์—†๋‹ค
        if(aRoot == bRoot) return false;

        // ์งฑ๋ผ๋ฆฌ ํ•ฉ์ณ์•ผ ํ•œ๋‹ค
      parents[bRoot] = aRoot;
        return true;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st= new StringTokenizer(br.readLine()," ");

        N = Integer.parseInt(st.nextToken());
        int E = Integer.parseInt(st.nextToken());
        edgeList = new Edge[E];

        for(int i=0; i<E; i++){
            st = new StringTokenizer(br.readLine()," ");
            int from = Integer.parseInt(st.nextToken());
            int to = Integer.parseInt(st.nextToken());
            int weight = Integer.parseInt(st.nextToken());
            edgeList[i] = new Edge(from-1, to-1, weight);
        }

        // ๊ฐ„์„ ๋น„์šฉ์˜ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        Arrays.sort(edgeList);
        makeSet();

        // ๊ฒฐ๊ณผ ๋น„์šฉ
        int result = 0;

        // ์นด์šดํŒ…
        int cnt = 0;

        for(Edge edge : edgeList){
            if(union(edge.from, edge.to)){
                result += edge.weight;
                if(++cnt == N-1) break;
            }
        }
        System.out.println(result);
    }
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

MST์˜ ๊ธฐ๋ณธ ๋ฌธ์ œ์ด๋‹ค.
๋‚˜๋Š” MST์˜ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค.
์—ฌ๊ธฐ์„œ ์Œ์˜ ๊ฐ€์ค‘์น˜๊นŒ์ง€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— comparable ๋ถ€๋ถ„์„ ์Œ์ˆ˜๊นŒ์ง€ ๊ณ ๋ คํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๋‹ค.


ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: