[백준] 16562번 친구비

HL·2021년 1월 27일
0

백준

목록 보기
49/104

문제 링크

문제 설명

  • 친구에게 돈을 주면 친구가 되어준다
  • 친구의 친구는 친구다
  • 모든 학생을 친구로 만들 수 있다면, 친구로 만드는데 드는 최소비용 출력

풀이

  • 모든 노드를 돌면서 한 클러스터의 최소 비용을 구한다
  • 클러스터 별 비용의 합을 구한다

코드

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')
profile
Swift, iOS 앱 개발을 공부하고 있습니다

0개의 댓글