만드는 중입니다

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

MAX 원소

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

요약
잎 노드에 값이 적힌 이진 트리에서 루트 값이 각 질의 M 이상이 되도록 하는 MAX 노드의 최소 개수를 구합니다. 불가능하면 -1을 출력합니다.
난이도

보통10점 중 7점

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

문제

Juku에게 정점이 NN개인 이진 트리가 있다. 이 트리는 균형 잡혀 있지 않을 수도 있다. 정점은 11부터 NN까지 번호가 매겨져 있고, 루트는 정점 11이다. 트리의 각 잎에는 수가 하나씩 적혀 있다. Juku는 나머지 정점마다 MIN 원소 또는 MAX 원소를 고를 수 있다. MIN 원소는 자식들의 값 중 작은 값을 자신의 값으로 쓰고, MAX 원소는 큰 값을 쓴다.

Juku는 서로 다른 수마다, 루트의 값이 그 수와 같거나 그보다 크게 되도록 하려면 MAX 원소가 최소 몇 개 필요한지 알고 싶어 한다. Juku의 질문에 답하는 프로그램을 작성하라.

입력

첫 줄에 정점의 수 NN이 주어진다 (3≤N≤1053 \le N \le 10^5). 이어지는 N−1N-1개의 줄에는 각각 두 정수 AiA_i, BiB_i (1≤Ai,Bi≤N1 \le A_i, B_i \le N, Ai≠BiA_i \ne B_i)가 주어지며, 이는 정점 AiA_i와 BiB_i 사이에 간선이 있다는 뜻이다.

그다음 각 줄에는 두 정수 XjX_j, YjY_j (1≤Xj≤N1 \le X_j \le N, 0≤Yj≤1070 \le Y_j \le 10^7)가 주어진다. XjX_j는 잎 정점의 번호이고, YjY_j는 그 잎에 적힌 값이다. 이러한 줄은 트리의 잎 개수만큼 있다.

다음 줄에는 질문의 개수 QQ (1≤Q≤5⋅1051 \le Q \le 5 \cdot 10^5)가 주어진다. 이어지는 QQ개의 줄에는 각각 정수 MkM_k (0≤Mk≤1070 \le M_k \le 10^7)가 하나씩 주어진다.

출력

Juku의 각 질문마다 한 줄에 답을 출력한다. 루트의 값을 MkM_k 이상으로 만들 수 있다면, 그에 필요한 MAX 원소의 최소 개수를 출력한다. 그렇게 큰 값을 루트에 쓸 수 없다면 −1-1을 출력한다. 답은 질문이 주어진 순서대로 출력한다.

예제1

  1. 예제 1

    입력
    5
    1 2
    2 3
    5 1
    4 2
    3 7
    4 5
    5 12
    3
    10
    4
    23
    
    예상 출력
    1
    0
    -1