알고리즘 문제풀이
방탈출(백준 23743)
wiojfe
2023. 8. 22. 14:36
탈출구를 0번으로 가정하고 MST를 만들면 된다. n개의 방에 0번방을 모두 연결해야 하니 총 n개의 길이 필요하다.
import sys
input= sys.stdin.readline
n,m =map(int, input().split())
edges =[]
parent=[i for i in range(n+1)]
def find(a):
if a!= parent[a]:
parent[a] = find(parent[a])
return parent[a]
def union(a,b):
a = find(a)
b = find(b)
if a< b :
parent[b] = a
else :
parent[a] = b
for i in range(m):
a,b,c = map(int, input().split())
edges.append((c,a,b))
costs =[0]+ list(map(int, input().split()))
for i in range(1, n+1):
edges.append((costs[i] , 0,i))
edges.sort()
ans = 0
cnt= 0
for i in range(len(edges)) :
wei , a,b = edges[i]
a = find(a)
b = find(b)
if a==b :
continue
else :
union(a,b)
ans += wei
cnt += 1
if cnt == n :
print(ans)
exit()