~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/14621
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์
- school : ์ ์ ๋ณ ํ๊ต ์ฑ๋ณ
- parent : ์ ์ ๋ณ ์๋ก์ ์งํฉ ์ ๋ณด
- edges : ๊ฐ์ ์ ๋น์ฉ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ณด ์ ์ฅ
- ์ ๋ ฌ๋ edges๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ๋ฉฐ ์ฌ์ดํด์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ฐ๊ฒฐ
- ์๋ก์ ์งํฉ์ด ์ ์ ๋ณธ์ธ๊ณผ ๊ฐ์ ์ ์ ์ ๊ฐ์๋ฅผ ์ธ์ด์ 1๊ฐ ์ด์์ด๋ผ๋ฉด ์งํฉ์ด 1๊ฐ ์ด์์ด๋ผ๋ ์๋ฏธ
- ๋ชจ๋ ์ ์ ์ ์ฐ๊ฒฐํ ์ ์๋ค๋ ์๋ฏธ์ ๊ฐ์ผ๋ฏ๋ก -1 ๋ฐํ
- ๊ทธ๋ ์ง ์๋ค๋ฉด ๊ฐ์ ์ ์ต์ ๋น์ฉ ๋ฐํ
์์ฑ ์ฝ๋
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
school = [''] + list(input().split())
parent = [i for i in range(n+1)]
edges = []
result = 0
for _ in range(m):
u, v, d = map(int, input().split())
edges.append((d, u, v))
edges.sort()
def find(x):
if x != parent[x]:
parent[x] = find(parent[x])
return parent[x]
def union(a, b):
a = find(a)
b = find(b)
if a < b:
parent[b] = a
else:
parent[a] = b
for w, a, b in edges:
if find(a) != find(b) and school[a] != school[b]: # ์ฌ์ดํด ๋ฐ์ํ์ง ์๊ณ , ์ฌ์ด/ ๋จ์ด๋ก ๋ค๋ฅด๋ค๋ฉด
union(a, b)
result += w
print(result if len([i for i in range(1, n+1) if parent[i] == i]) == 1 else -1)
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐