문제 링크
문제 설명
- 친구에게 돈을 주면 친구가 되어준다
 
- 친구의 친구는 친구다
 
- 모든 학생을 친구로 만들 수 있다면, 친구로 만드는데 드는 최소비용 출력
 
풀이
- 모든 노드를 돌면서 한 클러스터의 최소 비용을 구한다
 
- 클러스터 별 비용의 합을 구한다
 
코드
import sys
from collections import deque
def init():
    ipt = sys.stdin.readline
    n, m, k = map(int, ipt().split())
    cost_list = list(map(int, ipt().split()))
    adj_list = [[] for _ in range(n)]
    for _ in range(m):
        a, b = map(int, ipt().split())
        adj_list[a-1].append(b-1)
        adj_list[b-1].append(a-1)
    visited = [False] * n
    return n, k, visited, 0, adj_list, cost_list
def bfs(start):
    min_cost = float('inf')
    visited[start] = True
    q = deque([start])
    while q:
        cn = q.popleft()
        min_cost = min(min_cost, cost_list[cn])
        for nn in adj_list[cn]:
            if not visited[nn]:
                visited[nn] = True
                q.append(nn)
    return min_cost
    
    
n, k, visited, ans, adj_list, cost_list = init()
for i in range(n):
    if not visited[i]:
        ans += bfs(i)
if ans <= k:
    print(ans)
else:
    print('Oh no')