본문 바로가기

알고리즘 문제풀이

거리가 k이하인 트리 노드에서 사과 수확하기[백준 25516]

https://www.acmicpc.net/problem/25516

from collections import deque

n, k = map(int, input().split())
gra = [[] for _ in range(n)]
for _ in range(n-1):
    a, b = map(int, input().split())
    gra[a].append(b)
    gra[b].append(a)

isapple = list(map(int, input().split()))
visit = [0] * n

def bfs(start):
    q = deque()
    q.append((start, 0))  # (현재 노드, 깊이)
    visit[start] = 1
    ans = 0  # 사과 개수
    if isapple[start] == 1:
        ans += 1

    while q:
        current, depth = q.popleft()
        if depth >= k:  # 깊이가 k를 넘으면 종료
            continue

        for next_node in gra[current]:
            if visit[next_node] == 0:
                visit[next_node] = 1
                q.append((next_node, depth + 1))
                if isapple[next_node] == 1:
                    ans += 1

    print(ans)  # 결과 출력

bfs(0)

 

 

'알고리즘 문제풀이' 카테고리의 다른 글

돌다리[백준 12761]  (0) 2025.01.28
너구리 구구[백준 18126]  (1) 2025.01.28
영상처리[백준 21938]  (0) 2025.01.27
현수막[백준 14716]  (0) 2025.01.26
숨바꼭질[백준 6118]  (0) 2025.01.26