[๋ฐฑ์ค€] ๋„์‹œ ๋ถ„ํ•  ๊ณ„ํš / ํŒŒ์ด์ฌ / Python / ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ / Kruskal
Algorithm/Baekjoon

[๋ฐฑ์ค€] ๋„์‹œ ๋ถ„ํ•  ๊ณ„ํš / ํŒŒ์ด์ฌ / Python / ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ / Kruskal

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’กsolutions 

๐Ÿ’ฌ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

๐Ÿ’ฌ ํ•˜๋‚˜์˜ ๋งˆ์„์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋‘๊ฐœ์˜ ๋งˆ์„๋กœ ๋ถ„ํ™œํ•˜๋ฉด -> ๊ฐ ๋งˆ์„ ์•ˆ์— ์žˆ๋Š” ์ง‘๋“ค์€ ์„œ๋กœ ์—ฐ๊ฒฐ๋ผ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ์ด๋•Œ ๊ธธ์˜ ์œ ์ง€๋น„์˜ ํ•ฉ์€ ์ตœ์†Œ๊ฐ€ ๋ผ์•ผ ํ•œ๋‹ค

๐Ÿ’ฌ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•˜์—ฌ N-1๊ฐœ์˜ ์ง‘๋“ค์„ ์—ฐ๊ฒฐํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ์œ ์ง€๋น„๊ฐ€ ์ตœ๋Œ€์ธ ๊ฒฝ๋กœ๋Š” ๋Š์œผ๋ฉด (์ฆ‰, ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์œผ๋ฉด) ์ด๊ฒŒ ๋ฐ”๋กœ ์œ ์ง€๋น„๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก ๋งˆ์„์„ ๋‘๊ฐœ๋กœ ๋ถ„ํ™œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. -> ๊ฐ ์ง‘์„ ์—ฐ๊ฒฐํ•  ๋•Œ๋งˆ๋‹ค edge_cnt๋ฅผ ์„ธ์„œ  ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ n-2๊ฐ€ ๋˜๋ฉด breakํ•œ๋‹ค. (*์ฐธ๊ณ ๋กœ MST์—์„œ ๋ชจ๋“  ๊ฐ„์„ ์„ ์—ฐ๊ฒฐํ•  ๋•Œ ์ตœ์†Œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋Š” n-1์ด๋‹ค.)

๐Ÿ’ฌ ์ฒ˜์Œ์— ํŒŒ์ด์ฌ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ œ์ถœํ–ˆ์„ ๋•Œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๊ณ ,  sys ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์™€์„œ input = sys.stdin.readline์œผ๋กœ ์ž…๋ ฅ ๋ฐ›์œผ๋‹ˆ ํ†ต๊ณผํ•˜์˜€๋‹ค. (๋˜๋Š” pypy๋กœ ํ†ต๊ณผํ•  ์ˆ˜๋„ ์žˆ๋‹ค.)

 

๐Ÿ‘จ‍๐Ÿ’ปcode 

import sys

def find_parent(x):
    if parent[x] != x:
        return find_parent(parent[x])
    return parent[x]


def union_parent(parent_a, parent_b):
    if parent_a < parent_b:
        parent[parent_b] = parent_a
    else:
        parent[parent_a] = parent_b

input = sys.stdin.readline
n, m = map(int, input().split())
arr = []
for _ in range(m):
    a, b, c = map(int, input().split())
    arr.append([a, b, c])
arr.sort(key=lambda x:x[2])

edge_cnt = 0
answer = 0
parent = [i for i in range(n+1)]
for node_a, node_b, cost in arr:
    parent_a, parent_b = find_parent(node_a), find_parent(node_b)
    if parent_a != parent_b:
        union_parent(parent_a, parent_b)
        answer += cost
        edge_cnt += 1
        if edge_cnt == n-2:
            break
print(answer)

 

 

๐Ÿ“Œdescription 

 

1647๋ฒˆ: ๋„์‹œ ๋ถ„ํ•  ๊ณ„ํš

์ฒซ์งธ ์ค„์— ์ง‘์˜ ๊ฐœ์ˆ˜ N, ๊ธธ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 2์ด์ƒ 100,000์ดํ•˜์ธ ์ •์ˆ˜์ด๊ณ , M์€ 1์ด์ƒ 1,000,000์ดํ•˜์ธ ์ •์ˆ˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ M์ค„์— ๊ฑธ์ณ ๊ธธ์˜ ์ •๋ณด๊ฐ€ A B C ์„ธ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ A๋ฒˆ

www.acmicpc.net


๋ฌธ์ œ

๋™๋ฌผ์›์—์„œ ๋ง‰ ํƒˆ์ถœํ•œ ์›์ˆญ์ด ํ•œ ๋งˆ๋ฆฌ๊ฐ€ ์„ธ์ƒ๊ตฌ๊ฒฝ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ํ‰ํ™”๋กœ์šด ๋งˆ์„์— ๊ฐ€๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๊ทธ๊ณณ์—์„œ๋Š” ์•Œ ์ˆ˜ ์—†๋Š” ์ผ์ด ๋ฒŒ์–ด์ง€๊ณ  ์žˆ์—ˆ๋‹ค.

๋งˆ์„์€ N๊ฐœ์˜ ์ง‘๊ณผ ๊ทธ ์ง‘๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” M๊ฐœ์˜ ๊ธธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ธธ์€ ์–ด๋Š ๋ฐฉํ–ฅ์œผ๋กœ๋“ ์ง€ ๋‹ค๋‹ ์ˆ˜ ์žˆ๋Š” ํŽธ๋ฆฌํ•œ ๊ธธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๊ธธ๋งˆ๋‹ค ๊ธธ์„ ์œ ์ง€ํ•˜๋Š”๋ฐ ๋“œ๋Š” ์œ ์ง€๋น„๊ฐ€ ์žˆ๋‹ค.

๋งˆ์„์˜ ์ด์žฅ์€ ๋งˆ์„์„ ๋‘ ๊ฐœ์˜ ๋ถ„๋ฆฌ๋œ ๋งˆ์„๋กœ ๋ถ„ํ• ํ•  ๊ณ„ํš์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋งˆ์„์ด ๋„ˆ๋ฌด ์ปค์„œ ํ˜ผ์ž์„œ๋Š” ๊ด€๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งˆ์„์„ ๋ถ„ํ• ํ•  ๋•Œ๋Š” ๊ฐ ๋ถ„๋ฆฌ๋œ ๋งˆ์„ ์•ˆ์— ์ง‘๋“ค์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ๋ถ„ํ• ํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ ๋ถ„๋ฆฌ๋œ ๋งˆ์„ ์•ˆ์— ์žˆ๋Š” ์ž„์˜์˜ ๋‘ ์ง‘ ์‚ฌ์ด์— ๊ฒฝ๋กœ๊ฐ€ ํ•ญ์ƒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋งˆ์„์—๋Š” ์ง‘์ด ํ•˜๋‚˜ ์ด์ƒ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋งˆ์„์˜ ์ด์žฅ์€ ๊ณ„ํš์„ ์„ธ์šฐ๋‹ค๊ฐ€ ๋งˆ์„ ์•ˆ์— ๊ธธ์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ผ๋‹จ ๋ถ„๋ฆฌ๋œ ๋‘ ๋งˆ์„ ์‚ฌ์ด์— ์žˆ๋Š” ๊ธธ๋“ค์€ ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋ถ„๋ฆฌ๋œ ๋งˆ์„ ์•ˆ์—์„œ๋„ ์ž„์˜์˜ ๋‘ ์ง‘ ์‚ฌ์ด์— ๊ฒฝ๋กœ๊ฐ€ ํ•ญ์ƒ ์กด์žฌํ•˜๊ฒŒ ํ•˜๋ฉด์„œ ๊ธธ์„ ๋” ์—†์•จ ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์„์˜ ์ด์žฅ์€ ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋„๋ก ๊ธธ๋“ค์„ ๋ชจ๋‘ ์—†์• ๊ณ  ๋‚˜๋จธ์ง€ ๊ธธ์˜ ์œ ์ง€๋น„์˜ ํ•ฉ์„ ์ตœ์†Œ๋กœ ํ•˜๊ณ  ์‹ถ๋‹ค. ์ด๊ฒƒ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ง‘์˜ ๊ฐœ์ˆ˜ N, ๊ธธ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 2์ด์ƒ 100,000์ดํ•˜์ธ ์ •์ˆ˜์ด๊ณ , M์€ 1์ด์ƒ 1,000,000์ดํ•˜์ธ ์ •์ˆ˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ M์ค„์— ๊ฑธ์ณ ๊ธธ์˜ ์ •๋ณด๊ฐ€ A B C ์„ธ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ A๋ฒˆ ์ง‘๊ณผ B๋ฒˆ ์ง‘์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธธ์˜ ์œ ์ง€๋น„๊ฐ€ C (1 ≤ C ≤ 1,000)๋ผ๋Š” ๋œป์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์—†์• ๊ณ  ๋‚จ์€ ๊ธธ ์œ ์ง€๋น„์˜ ํ•ฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.


 

๋ฐ˜์‘ํ˜•