๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š Algorithm/Baekjoon

Baekjoon ๋ฐฑ์ค€ 1922 ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋ฌธ์ œํ’€์ด

kim_ghgh_ 2023. 7. 14. 22:45

๐Ÿ“ 1922 ๋ฌธ์ œ

๋„ํ˜„์ด๋Š” ์ปดํ“จํ„ฐ์™€ ์ปดํ“จํ„ฐ๋ฅผ ๋ชจ๋‘ ์—ฐ๊ฒฐํ•˜๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์•„์‰ฝ๊ฒŒ๋„ ํ—ˆ๋ธŒ๊ฐ€ ์žˆ์ง€ ์•Š์•„ ์ปดํ“จํ„ฐ์™€ ์ปดํ“จํ„ฐ๋ฅผ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋‘๊ฐ€ ์ž๋ฃŒ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“  ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. (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๋Š” ๊ฐ™์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

์ถœ๋ ฅ

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

 

 

๐Ÿง ํ’€์ด

union find๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค.

def find(x):
    if x == parent[x]:
      return x
    parent[x]=find(parent[x])
    return parent[x]

def union(x,y):
    x = find(x)
    y = find(y)
    if x < y :
        parent[y] = x
    else :
        parent[x] = y
        
N = int(input())
M = int(input())
arr = []
res = 0
parent =[i for i in range(N+1)]

for i in range(M) :
    a, b, c = map(int, input().split())
    arr.append((c, a, b))
    
arr.sort()

for i in arr :
    c, a, b = i
    if find(a) != find(b) :
        union(a, b)
        res += c
        
print(res)
 

 

728x90