본문 바로가기

성우리뷰

친구비)python

import sys

input= sys.stdin.readline

 


def find(target):
    if network[target]==target:
        return target

    network[target]=find(network[target])
    return network[target]

def union(a,b):
    findA= find(a)
    findB= find(b)

    if findA==findB:
        return

    if findA<findB:
        network[findB]=findA
    else:
        network[findA]=findB

N, M, K=map(int, input().split())
costs=[0] + list(map(int, input().split()))
#첫 항에 0을 넣고, 다음으로 숫자를 집어넣는 리스트

network=list(range(N+1))
#n+1 크기의 리스트 생성

for _ in range(M):      # for _ in range() : 인덱스 무시. 즉 걍 m번 실행
    a, b= map(int, input().split())

    union(a,b)

for i in range(1, N+1):
    find(i)

INF=2147483647
cheapList=[INF]*(N+1)  # (N+1)개짜리, 요소가 전부 INF인 배열 생성

for i in range(1, N+1):
    cheapList[network[i]]= min(cheapList[network[i]], costs[i])
#i를 1~N+1 범위로 놓고, CHEAPLIST의 NETWORK[i]번째 요소를, network[i]와 costs[i]중
#작은 거로

friendFee=0

for fee in cheapList:
    if fee!=INF:
        friendFee += fee

if friendFee<=K:
    print(friendFee)
else:
    print("Oh no")

'성우리뷰' 카테고리의 다른 글

ㅅㄱ그라운드) python  (2) 2020.07.13
14938) ㅅㄱ그라운드  (4) 2020.07.13
16562) 친구비  (4) 2020.07.12
2869)달팽이 등산 (c, python)  (2) 2020.07.11
복잡도 nlog(n)되도록 최대연속부분수열 도출하기  (4) 2020.07.05