아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

가까운 소들

면접 대비

시간 제한1초메모리 제한128 MB

요약
각 필드에 C(i)마리의 소가 있는 N개 노드 트리에서 모든 필드에 대해 거리 K 이내에 있는 소의 합을 구한다. K는 최대 20이다.
난이도

보통10점 중 6점

유형
트리, DFS, 동적 계획법, 누적 합
정답자
아직 제출이 없습니다

문제

농부 존은 소들이 가까운 밭 사이를 자주 오간다는 것을 알게 되었다. 그래서 각 밭에는 원래 그 밭에 있던 소뿐만 아니라 근처 밭에서 찾아올 수도 있는 소까지 먹일 만큼 충분한 풀을 심으려고 한다.

농장은 NN개의 밭(1≤N≤100,0001 \le N \le 100{,}000)으로 이루어져 있고, 양방향 길 N−1N-1개가 밭들을 잇는다. 임의의 두 밭 사이에는 길로 이어진 경로가 정확히 하나만 존재하므로, 밭들은 하나의 트리를 이룬다. 밭 ii에는 처음에 C(i)C(i)마리의 소가 있으며(0≤C(i)≤10000 \le C(i) \le 1000), 소는 길을 최대 KK개(1≤K≤201 \le K \le 20)까지 건너 다른 밭으로 이동할 수 있다.

각 밭 ii에 대해, 그곳에 모일 수 있는 소의 최대 수 M(i)M(i)를 구하자. 이는 밭 ii까지의 거리(두 밭을 잇는 유일한 경로에 포함된 길의 개수)가 KK 이하인 모든 밭 jj의 C(j)C(j)를 더한 값이다. 농장의 구조와 모든 C(i)C(i)가 주어질 때, 모든 밭에 대해 M(i)M(i)를 계산하라.

입력

  • 첫째 줄: 공백으로 구분된 두 정수 NN과 KK.
  • 둘째 줄부터 NN번째 줄까지: 각 줄에 공백으로 구분된 두 정수 ii와 jj (1≤i,j≤N1 \le i, j \le N)가 주어지며, 밭 ii와 밭 jj가 하나의 길로 직접 연결되어 있음을 뜻한다.
  • N+1N+1번째 줄부터 2N2N번째 줄까지: N+iN+i번째 줄에 정수 C(i)C(i)가 주어진다 (0≤C(i)≤10000 \le C(i) \le 1000).

출력

  • 첫째 줄부터 NN번째 줄까지: ii번째 줄에 밭 ii로부터 거리 KK 이내에 있는 소의 수 M(i)M(i)를 출력한다.

힌트

첫 번째 예제에서는 밭이 66개이고, 길이 (5,1)(5,1), (3,6)(3,6), (2,4)(2,4), (2,1)(2,1), (3,2)(3,2)로 연결되어 있으며, 밭 ii에는 C(i)=iC(i) = i마리의 소가 있다. K=2K = 2일 때 밭 11에는 길을 두 개 이하로 건너 밭 1,2,3,4,51, 2, 3, 4, 5에서 소가 모일 수 있고, 이들의 소는 모두 1+2+3+4+5=151 + 2 + 3 + 4 + 5 = 15마리이므로 M(1)=15M(1) = 15이다.

예제2

  1. 예제 1

    입력
    6 2
    5 1
    3 6
    2 4
    2 1
    3 2
    1
    2
    3
    4
    5
    6
    
    예상 출력
    15
    21
    16
    10
    8
    11
    
  2. 예제 2

    입력
    5 1
    1 2
    2 3
    3 4
    4 5
    10
    20
    30
    40
    50
    
    예상 출력
    30
    60
    90
    120
    90