DHistory

[Baekjoon] DFS/BFS - 거리가 k이하인 트리 노드에서 사과 수확하기 본문

Computer Science/Algorithm

[Baekjoon] DFS/BFS - 거리가 k이하인 트리 노드에서 사과 수확하기

ddu0422 2023. 9. 7. 12:26

문제

 

25516번: 거리가 k이하인 트리 노드에서 사과 수확하기

n개의 정점과 n - 1개의 간선으로 구성된 트리 T가 있다. 정점 번호는 0부터 n - 1까지이고 0번 정점이 루트이다. 모든 간선의 길이는 1이다. 트리 T의 각 정점에는 사과가 0개 또는 1개 놓여있다. 루

www.acmicpc.net

 

풀이

"""
n개의 정점 / n - 1개의 간선
번호는 0부터 n - 1까지
0번 정점이 루트 / 모든 간선의 길이는 1

각 정점에는 사과가 0개 또는 1개 놓여있다.
루트 노드에서 거리가 k이하인 노드에 있는 사과를 수확하려고 한다.
수확할 수 있는 사과 개수를 출력하자.

0(1) - 1 - 3(1)
         ㄴ 4
     ㄴ 2 - 5(1)
         ㄴ 6 - 7(1)

0, 3, 5 => 2개
"""
import sys
from collections import deque

n, k = map(int, sys.stdin.readline().rstrip().split())
nodes = [[] for _ in range(n + 1)]
for _ in range(n - 1):
    a, b = map(int, sys.stdin.readline().rstrip().split())
    nodes[a].append(b)
    nodes[b].append(a)
distance = [-1] * (n + 1)
apples = list(map(int, sys.stdin.readline().rstrip().split()))


def solution(nodes, distance, k, apples):
    answer = 0
    queue = deque([0])
    distance[0] = 0

    while queue:
        now = queue.popleft()

        for v in nodes[now]:
            if distance[v] == -1:
                distance[v] = distance[now] + 1
                queue.append(v)
    
    for index, value in enumerate(distance):
        if -1 < value <= k and apples[index]:
            answer += 1
        
    return answer


print(solution(nodes, distance, k, apples))

 

채점 결과