๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”‘ PS/BOJ

boj-1922 ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ

by bdd 2022. 7. 19.
 

1922๋ฒˆ: ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ

์ด ๊ฒฝ์šฐ์— 1-3, 2-3, 3-4, 4-5, 4-6์„ ์—ฐ๊ฒฐํ•˜๋ฉด ์ฃผ์–ด์ง„ output์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

www.acmicpc.net

 

 

 

 

๋ฌธ์ œ


๋„ํ˜„์ด๋Š” ์ปดํ“จํ„ฐ์™€ ์ปดํ“จํ„ฐ๋ฅผ ๋ชจ๋‘ ์—ฐ๊ฒฐํ•˜๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์•„์‰ฝ๊ฒŒ๋„ ํ—ˆ๋ธŒ๊ฐ€ ์žˆ์ง€ ์•Š์•„ ์ปดํ“จํ„ฐ์™€ ์ปดํ“จํ„ฐ๋ฅผ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋‘๊ฐ€ ์ž๋ฃŒ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“  ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. (a์™€ b๊ฐ€ ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ๋‹ค๋Š” ๋ง์€ a์—์„œ b๋กœ์˜ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. a์—์„œ b๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ์ด ์žˆ๊ณ , b์™€ c๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ์ด ์žˆ์œผ๋ฉด a์™€ c๋Š” ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ๋‹ค.)

 

๊ทธ๋Ÿฐ๋ฐ ์ด์™•์ด๋ฉด ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋น„์šฉ์„ ์ตœ์†Œ๋กœ ํ•˜์—ฌ์•ผ ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋น„์šฉ ์™ธ์— ๋‹ค๋ฅธ ๊ณณ์— ๋ˆ์„ ๋” ์“ธ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด์ œ ๊ฐ ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋น„์šฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๋ชจ๋“  ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ๋น„์šฉ์„ ์ถœ๋ ฅํ•˜๋ผ. ๋ชจ๋“  ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

 

 

 

์ž…๋ ฅ


์ฒซ์งธ ์ค„์— ์ปดํ“จํ„ฐ์˜ ์ˆ˜ N (1 ≤ N ≤ 1000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„์—๋Š” ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์„ ์˜ ์ˆ˜ M (1 ≤ M ≤ 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

 

์…‹์งธ ์ค„๋ถ€ํ„ฐ M+2๋ฒˆ์งธ ์ค„๊นŒ์ง€ ์ด M๊ฐœ์˜ ์ค„์— ๊ฐ ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ๋“œ๋Š” ๋น„์šฉ์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๋น„์šฉ์˜ ์ •๋ณด๋Š” ์„ธ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ, ๋งŒ์•ฝ์— a b c ๊ฐ€ ์ฃผ์–ด์ ธ ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด a์ปดํ“จํ„ฐ์™€ b์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ๋น„์šฉ์ด c (1 ≤ c ≤ 10,000) ๋งŒํผ ๋“ ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. a์™€ b๋Š” ๊ฐ™์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

 

์ถœ๋ ฅ


๋ชจ๋“  ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ๋น„์šฉ์„ ์ฒซ์งธ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

 

ํ’€์ด


์ตœ์†Œ ํŒจ๋‹ํŠธ๋ฆฌ(ํฌ๋ฃจ์Šค์นผ)๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฌธ์ œ์˜€๋Š”๋ฐ์š”, ๊ทธ ์ด์œ ๋Š” ๋ชจ๋“  ๋„คํŠธ์›Œํฌ๊ฐ€ ์—ฐ๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋„คํŠธ์›Œํฌ์˜ ๋ฃจํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ž˜ํ”„ ์ƒ์—์„œ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ„์„ ์˜ ์—ฐ๊ฒฐ ๋น„์šฉ์„ ์ตœ์†Œ๋กœ ๊ฐ€์ง€๋Š” ๋‹ต์„ ๊ตฌํ• ๋•Œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ์š”, ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ๋ฅผ ํ†ตํ•ด ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๋…ธ๋“œ๋ฅผ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด Comparable์„ ๊ตฌํ˜„ ์ƒ์†ํ–ˆ๋Š”๋ฐ์š”, ์ด๋ฅผ ํ†ตํ•ด ์ •๋ ฌ ๊ธฐ์ค€์„ ๋งŒ๋“ค์–ด์คฌ์Šต๋‹ˆ๋‹ค. 

 

 

 

 

 

 

์ดํ›„ ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ๋ฅผ ์œ„ํ•ด ์ž์‹ ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š” ๋ฉ”์„œ๋“œ(find)์™€ ์ด๋ฅผ ํ•ฉ์ณ์ฃผ๋Š” ๋ฉ”์„œ๋“œ(union)์„ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์ฐพ๊ณ  ํ†ต์ผํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

 

 

 

๋งˆ์ง€๋ง‰์œผ๋กœ Edge๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๋ฃจํŠธ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์ด๋ฅผ ๋น„์šฉ์—์„œ ๋”ํ•ด์ฃผ๊ณ  ๋ฃจํŠธ๋ฅผ ํ•ฉ์ณ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

๋”๋ณด๊ธฐ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
    static int n, m;
    static List<Edge> edges = new ArrayList<>();
    static int[] parent;

    public static void main(String[] args) throws Exception {
        n = input.integer();
        m = input.integer();
        parent = new int[n + 1];

        for (int index = 0; index < m; index++) {
            int start = input.integer();
            int end = input.integer();
            int cost = input.integer();
            edges.add(new Edge(start, end, cost));
        }

        Collections.sort(edges);

        int answer = 0;
        for (int index = 1; index <= n; index++) {
            parent[index] = index;
        }

        for (Edge edge : edges) {
            if (find(edge.start) != find(edge.end)) {
                answer += edge.cost;
                union(edge.start, edge.end);
            }
        }
        System.out.println(answer);
    }

    public static int find(int x) {
        if (x == parent[x]) {
            return x;
        }
        return parent[x] = find(parent[x]);
    }

    public static void union(int x, int y) {
        x = find(x);
        y = find(y);
        if (x != y) {
            parent[y] = x;
        }
    }

    static class Edge implements Comparable<Edge> {
        int start;
        int end;
        int cost;

        public Edge(int start, int end, int cost) {
            this.start = start;
            this.end = end;
            this.cost = cost;
        }

        @Override
        public int compareTo(Edge o) {
            return this.cost - o.cost;
        }
    }

    static Input input = new Input();

    static class Input {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer("");

        public int integer() throws Exception {
            if (!st.hasMoreElements()) st = new StringTokenizer(br.readLine());
            return Integer.parseInt(st.nextToken());
        }

        public String next() throws Exception {
            if (!st.hasMoreElements()) st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }

        public char[] nToCharArray() throws Exception {
            if (!st.hasMoreElements()) st = new StringTokenizer(br.readLine());
            return st.nextToken().toCharArray();
        }
    }
}

'๐Ÿ”‘ PS > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

boj-1916  (0) 2022.08.24
boj-2252  (0) 2022.08.22
boj-1850  (0) 2022.07.23
boj-1744 ์ˆ˜ ๋ฌถ๊ธฐ  (0) 2022.07.15
boj-1300 K๋ฒˆ์งธ ์ˆ˜  (0) 2022.07.14

๋Œ“๊ธ€