๐ ๋ฌธ์
๊นฝ๋ฏธ๋ 24์ด ๋ชจํ์๋ก์ด๋ค. ๊นฝ๋ฏธ๋ ๋๋ง๋ฒ์ฌ๊ฐ ๋ ์ ์๋ค๋ฉฐ ์์ ์ ํ๋ก๊ทธ๋๋ฐ ๋ฅ๋ ฅ์ ์ด์ฉํ์ฌ ๋ฏธํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค. ๋ฏธํ ์ฑ์ ๋ํ์์ ํ๊ฒ์ผ๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ ๋ํ๊ต๊ฐ์ ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ๋ง๋ค์๋ค.
์ด ์ฑ์ ์ฌ์ฉ์๋ค์ ์ํด ์ฌ์ฌ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๋ค. ์ด ๊ฒฝ๋ก๋ 3๊ฐ์ง ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
1. ์ฌ์ฌ ๊ฒฝ๋ก๋ ์ฌ์ฉ์๋ค์ ์ฌ์ฌ์ ๋ง์กฑ์ํค๊ธฐ ์ํด ๋จ์ด ๋ํ๊ต์ ์ฌ์ด ๋ํ๊ต๋ค์ ์ฐ๊ฒฐํ๋ ๋๋ก๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
2. ์ฌ์ฉ์๋ค์ด ๋ค์ํ ์ฌ๋๊ณผ ๋ฏธํ ํ ์ ์๋๋ก ์ด๋ค ๋ํ๊ต์์๋ ๋ชจ๋ ๋ํ๊ต๋ก ์ด๋์ด ๊ฐ๋ฅํ ๊ฒฝ๋ก์ด๋ค.
3. ์๊ฐ์ ๋ญ๋นํ์ง ์๊ณ ๋ฏธํ ํ ์ ์๋๋ก ์ด ๊ฒฝ๋ก์ ๊ธธ์ด๋ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๋์ด์ผ ํ๋ค.
๋ง์ฝ ๋๋ก ๋ฐ์ดํฐ๊ฐ ๋ง์ฝ ์ผ์ชฝ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค๋ฉด, ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ ๋ณด๋ผ์ ์ ๊ณผ ๊ฐ์ด ๊ฒฝ๋ก๋ฅผ ๊ตฌ์ฑํ๋ฉด ์์ 3๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ๋ก๋ฅผ ๋ง๋ค ์ ์๋ค.
์ด๋, ์ฃผ์ด์ง๋ ๊ฑฐ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฌ ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ๊ตฌํด๋ณด์.
๐์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ์งธ ์ค์ ํ๊ต์ ์ $ N $์ ํ๊ต๋ฅผ ์ฐ๊ฒฐํ๋ ๋๋ก์ ๊ฐ์ $ M $์ด ์ฃผ์ด์ง๋ค. $ (2 ≤ N ≤ 1,000) $ $ (1 ≤ M ≤ 10,000) $
๋์งธ ์ค์ ๊ฐ ํ๊ต๊ฐ ๋จ์ด ๋ํ๊ต๋ผ๋ฉด $ M $, ์ฌ์ด ๋ํ๊ต๋ผ๋ฉด $ W $ ์ด ์ฃผ์ด์ง๋ค.
๋ค์ $ M $๊ฐ์ ์ค์ u, v, d๊ฐ ์ฃผ์ด์ง๋ฉฐ uํ๊ต์ vํ๊ต๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ ์ด ๊ฑฐ๋ฆฌ๋ d์์ ๋ํ๋ธ๋ค. $ (1 ≤ u, v ≤ N) $,
$ (1 ≤ d ≤ 1,000) $
๐์ถ๋ ฅ
๊นฝ๋ฏธ๊ฐ ๋ง๋ ์ฑ์ ๊ฒฝ๋ก ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. (๋ชจ๋ ํ๊ต๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒฝ๋ก๊ฐ ์์ ๊ฒฝ์ฐ -1์ ์ถ๋ ฅํ๋ค.)
๐ ๋ฌธ์ ํ์ด
์ด ๋ฌธ์ ๋ ์ต์ ์ ์ฅ ํธ๋ฆฌ, ์ต์ ์คํจ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฌธ์ ์๋ค. ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค.
๊ฐ์ ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ , ๊ฐ์ ์ ๋ฝ์๋ด๋๋ ์ด๋ ์ด์ด์ฃผ๊ณ ์๋ ํ๊ต๊ฐ ๊ฐ์ ์ฑ๋ณ์ ํ๊ต๋ผ๋ฉด ๊ทธ ๊ฐ์ ์ ์ทจ๊ธํ์ง ์์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ ๋ชจ๋ ํ๊ต๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒฝ๋ก๊ฐ ์์ ๊ฒฝ์ฐ -1์ ์ถ๋ ฅํ๋ผ๊ณ ํ์๋๋ฐ, ์ด ๊ฒฝ์ฐ๋ ์ต์ ์คํจ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ค์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ปํ๋ค. ์ฆ ๊ฐ์ ์ ๊ฐฏ์๊ฐ n-1๊ฐ๊ฐ ๋์ง ๋ชปํ๋ ๊ฒฝ์ฐ์ด๋ค. ์ด ๋ถ๋ถ์ ์ฒ์์ ๋์ณค๋ค.ใ
๐ป ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import sys, heapq input = sys.stdin.readline def find_parent(parent, x): if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] def union_parent(parent, a,b): a = find_parent(parent, a) b = find_parent(parent, b) if a<b: parent[b] = a elif a>b: parent[a] = b n,m = map(int,input().split()) # ๊ฐฏ์ ๋ง์ถฐ์ฃผ๊ธฐ ์ํด N์ 0๋ฒ์งธ ์ธ๋ฑ์ค์ sex = ["N"]+list(map(str,input().rstrip().split())) parent = [i for i in range(n+1)] h = [] ans = 0 stop = n-1 for _ in range(m): u,v,d = map(int,input().split()) heapq.heappush(h, [d,u,v]) while h: cost, a,b = heapq.heappop(h) # ๊ฐ์ ์ฑ๋ณ์ ํ๊ต๋ผ๋ฉด ๋ฌด์ if sex[a] == sex[b]: continue if find_parent(parent,a) != find_parent(parent,b): union_parent(parent,a,b) ans += cost stop -= 1 # ์ต์ ์คํจ๋ ํธ๋ฆฌ๊ฐ ์์ฑ๋์๋ค๋ฉด ans ์ถ๋ ฅํ ์ข
๋ฃ if stop == 0: print(ans) exit() print(-1) # ์ต์ ์คํจ๋ ํธ๋ฆฌ๋ฅผ ์์ฑํ์ง ๋ชปํ๊ณ while๋ฌธ์ ๋์๋ค๋ฉด -1 | cs |
๐ญ ์ํ์ฐฉ์ค
๐ ๋ฌธ์ ๋งํฌ ๋๋ง ์๋๋ ์ฐ์
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 16118๋ฒ ๋ฌ๋น ์ฌ์ฐ - ํ์ด์ฌ (0) | 2022.10.10 |
---|---|
[๋ฐฑ์ค] 13164๋ฒ: ํ๋ณต ์ ์น์ - ์๋ฐ (0) | 2022.10.09 |
[๋ฐฑ์ค] 2887๋ฒ: ํ์ฑ ํฐ๋ - ํ์ด์ฌ (1) | 2022.10.05 |
[๋ฐฑ์ค] 16932_๋ชจ์๋ง๋ค๊ธฐ - ํ์ด์ฌ (1) | 2022.09.30 |
[๋ฐฑ์ค] 11780๋ฒ: ํ๋ก์ด๋ 2 - Python (0) | 2022.09.22 |