๐Ÿค–/๋ฐฑ์ค€

๋ฐฑ์ค€ 1197: ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ (Python)

sssbin 2022. 7. 29. 16:32

 

https://www.acmicpc.net/problem/1197

 

1197๋ฒˆ: ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ V(1 ≤ V ≤ 10,000)์™€ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ E(1 ≤ E ≤ 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ E๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์„ธ ์ •์ˆ˜ A, B, C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” A๋ฒˆ ์ •์ ๊ณผ B๋ฒˆ ์ •์ ์ด

www.acmicpc.net

 

์ผ๋ฐ˜์ ์ธ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€๋ฉด ๋œ๋‹ค.

1. ๊ฐ„์„  -> ๋น„์šฉ ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

2. ์‚ฌ์ดํด์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด(= parent๊ฐ€ ๊ฐ™์ง€ ์•Š์œผ๋ฉด) union

 

ํ•œ๋ฒˆ ์—๋Ÿฌ๋‚ฌ์—ˆ๋Š”๋ฐ,,, ์–ด์ด์—†๊ฒŒ๋„ cost ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค๋Š” ์ƒ๊ฐ์— ์‚ฌ๋กœ์žกํ˜€์„œ

๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด a, b, c๋ฅผ ์ž…๋ ฅ ๋ฐ›์„ ๋•Œ c, a, b๋กœ ์ž…๋ ฅ๋ฐ›์Œ,,ใ…Ž ์‹ค์ˆ˜ํ•˜์ง€ ๋ง์ž

 

import sys
sys.setrecursionlimit(10000)
input = sys.stdin.readline

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

def union(parent, a, b):
    a = find(parent, a)
    b = find(parent, b)
    if a < b:
        parent[b] = a
    else:
        parent[a] = b

v, e = map(int, input().split())

parent = [0] * (v+1)
for i in range(1, v+1):
    parent[i] = i

edges = []
for _ in range(e):
    a, b, c = map(int, input().split())
    edges.append((c, a, b))
edges.sort()

res = 0

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

print(res)