만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

우산

시간 제한2초메모리 제한1024 MB

요약
뿌리가 1번인 트리에서 표시된 K개의 정점 중 i개를 방문하는 최소 이동 시간을 i마다 구합니다.
난이도

보통10점 중 7점

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

문제

그대는 내 머리 위의 우산, 어깨 위에 차가운 비 내리는 밤, 내 곁에 그대가 없는 반쪽의 세상, 그댄 나 없이는 안 돼요.

- <우산>, 윤하

윤하는 트리 구조의 도시에 살고 있다. 도시에는 비가 오고 있다. 도시의 정점은 N개이며, 1번부터 N번까지 번호가 붙어 있다.

윤하는 방문하고 싶은 서로 다른 K개의 정점을 골랐다. 윤하는 지금 1번 정점에 있다. 간선으로 이어진 두 정점 사이를 이동하는 데 1초가 걸린다. 윤하는 K개의 정점 중 일부를 지금 방문하려 한다. K개의 정점 중 1개, 2개, …, K개를 방문하는 데 필요한 최소 시간을 계산하자.

하나의 정점을 여러 번 방문하면 첫 번째 방문만 센다. 정점들을 방문한 뒤 윤하가 1번 정점으로 돌아올 필요는 없다.

입력

첫 줄에 정점의 개수 N과 윤하가 방문하고 싶은 정점의 개수 K가 주어진다. (1 ≤ N ≤ 300,000, 1 ≤ K ≤ 5,000, K < N)

둘째 줄부터 N-1개의 줄에는 윤하가 사는 도시의 간선이 잇는 정점들의 번호를 나타내는 두 정수 ai와 bi가 주어진다. (1 ≤ ai, bi ≤ N, ai ≠ bi)

마지막 줄에는 윤하가 방문하고 싶은 서로 다른 K개의 정수 c1, ..., cK가 공백으로 구분되어 주어진다. (ci ≠ 1)

출력

윤하가 방문하고 싶은 정점들 중 1개, 2개, …, K개를 방문하는 데 필요한 최소 시간을 공백으로 구분하여 순서대로 출력한다.

예제2

  1. 예제 1

    입력
    4 3
    1 2
    1 3
    3 4
    2 3 4
    
    예상 출력
    1
    2
    4
    
  2. 예제 2

    입력
    10 4
    10 4
    4 6
    5 1
    4 3
    2 3
    2 8
    9 3
    7 2
    2 1
    4 8 9 10
    
    예상 출력
    2
    4
    6
    8