728x90
반응형
https://www.acmicpc.net/problem/16562
16562번: 친구비
첫 줄에 학생 수 N (1 ≤ N ≤ 10,000)과 친구관계 수 M (0 ≤ M ≤ 10,000), 가지고 있는 돈 k (1 ≤ k ≤ 10,000,000)가 주어진다. 두번째 줄에 N개의 각각의 학생이 원하는 친구비 Ai가 주어진다. (1 ≤ Ai ≤ 10,
www.acmicpc.net
문제 해결
- 결국 친구 사이클(network)를 만들어서 거기서 친구비 가장 작은 값을 더해주는 문제.
- 즉 사이클과 그 사이클 안의 가장 작은 친구비를 구하면 된다.
CODE
import sys
input = sys.stdin.readline
INF = sys.maxsize
sys.setrecursionlimit(10**6)
def dfs(num):
global money
money = min(money, A[num])
if len(graph[num])==0:
return
for go in graph[num]:
if visited[go] ==False:
visited[go] = True
dfs(go)
if __name__=='__main__':
n, m, k = map(int, input().split()) # 학생 수, 친구 관계수, 돈
A = [0] + list(map(int, input().split())) # 친구 비
graph = [[] for _ in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
visited = [False]*(n+1)
ans = 0
for i in range(1,n+1):
if not(visited[i]):
visited[i] = True
money = INF
dfs(i)
ans += money
if k >= ans:
print(ans)
else:
print("Oh no")
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 1371 가장 많은 글자 (0) | 2023.04.14 |
---|---|
[python] 백준 11060 점프 점프 (0) | 2023.04.13 |
[python] 백준 2258 정육점 (0) | 2023.04.13 |
[python] 백준 9526 1의 개수 세기 (0) | 2023.04.13 |
[python] 백준 9082 지뢰찾기 (0) | 2023.04.13 |
댓글