만드는 중입니다

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

빨강 검정 트리

시간 제한4초메모리 제한512 MB

요약
루트가 있는 트리에서 조상과 자손이 함께 선택되지 않도록 노드를 고르는 경우 중, 빨간 노드를 정확히 k개 포함하는 경우의 수를 k=0부터 m까지 구합니다.
난이도

보통10점 중 7점

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

문제

루트가 있는 트리가 nn개의 노드로 주어진다. 노드는 11부터 nn까지 번호가 매겨져 있고, 루트는 1번 노드이다. 노드 중 mm개는 빨간색이고 나머지는 검은색이다.

노드의 부분집합을 고르되, 고른 노드 중 어떤 노드도 다른 고른 노드의 조상이 되지 않도록 한다. 예를 들어 AA가 BB의 부모이고 BB가 CC의 부모라면, AA, BB, CC 중에서는 최대 하나만 고를 수 있다. 고른 노드 중 빨간 노드가 정확히 kk개가 되기를 원한다.

k=0,…,mk = 0, \ldots, m 각각에 대해 빨간 노드를 정확히 kk개 포함하고 위 조건을 만족하는 부분집합의 개수를 구하라.

입력

첫 줄에 두 정수 nn과 mm이 주어진다 (1≤n≤2×1051 \le n \le 2 \times 10^5, 0≤m≤min⁡(103,n)0 \le m \le \min(10^3, n)). 이어지는 n−1n-1개의 줄에는 정수 pp가 하나씩 주어지며, 이는 차례로 2번 노드, 3번 노드, ...의 부모 번호이다. 이어지는 mm개의 줄에는 빨간 노드의 번호 rr이 하나씩 주어진다. 같은 rr이 두 번 나오지 않는다.

출력

m+1m+1개의 줄을 출력한다. k+1k+1번째 줄에는 빨간 노드를 정확히 kk개 포함하고 조건을 만족하는 부분집합의 개수를 109+710^9 + 7로 나눈 나머지를 출력한다.

예제3

  1. 예제 1

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

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

    입력
    14 4
    1
    2
    1
    2
    3
    4
    5
    5
    13
    8
    10
    4
    4
    8
    3
    12
    13
    
    예상 출력
    100
    169
    90
    16
    0