만드는 중입니다

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

목서 나무

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

요약
주어진 트리 T의 정점 1부터 n까지의 LCA 구조를 그대로 유지하고, 두 정점의 LCA 번호가 max(i, j) + k를 넘지 않는 (n+m)개 정점의 트리 개수를 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

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

문제

8년 전 Little B는 목서 나무를 보았다. 목서 나무는 정점이 nn개인 트리 TT이며, 루트가 아닌 모든 정점의 부모는 자기 번호보다 작은 번호를 가진다. 정수 kk가 주어졌을 때, 정점이 (n+m)(n + m)개인 루트 트리 T′T'가 다음 조건을 모두 만족하면 T′T'를 번영하는 트리라고 한다.

  • 1≤i,j≤n1 \leq i, j \leq n인 모든 (i,j)(i, j)에 대해, TT와 T′T'에서 정점 ii와 jj의 최소 공통 조상의 번호가 같다.
  • 1≤i,j≤n+m1 \leq i, j \leq n + m인 모든 (i,j)(i, j)에 대해, T′T'에서 정점 ii와 jj의 최소 공통 조상의 번호는 max⁡(i,j)+k\max(i, j) + k를 넘지 않는다.

모든 정점은 1번부터 번호가 매겨지며 루트의 번호는 1이다. T′T'는 루트가 아닌 모든 정점의 부모 번호가 자기 번호보다 작아야 한다는 조건을 만족할 필요가 없다.

Little B는 정점이 (n+m)(n + m)개인 번영하는 트리의 개수를 구하려 한다. 두 트리는 어떤 정점의 부모가 서로 다르면 다른 트리로 본다. 답을 109+710^9+7로 나눈 나머지를 출력한다.

입력

입력에는 여러 개의 테스트 데이터가 포함된다.

첫 줄에는 테스트 케이스 번호 cc와 테스트 데이터의 개수 tt가 주어진다. c=0c = 0이면 샘플 테스트이다.

각 테스트 데이터의 첫 줄에는 정수 nn, mm, kk가 주어진다. 둘째 줄에는 n−1n - 1개의 정수 f2,f3,…,fnf_2, f_3, \ldots, f_n이 주어지며, fif_i는 TT에서 정점 ii의 부모 번호이다.

출력

각 테스트 데이터에 대해, 번영하는 트리의 개수를 109+710^9+7로 나눈 나머지를 한 줄에 출력한다.

제한

모든 테스트 데이터에 대해 다음이 보장된다.

  • 1≤t≤151 \leq t \leq 15
  • 1≤n≤3×1041 \leq n \leq 3 \times 10^4
  • 0≤m≤30000 \leq m \leq 3000
  • 0≤k≤100 \leq k \leq 10
  • 1≤fi≤i−11 \leq f_i \leq i - 1

예제1

  1. 예제 1

    입력
    0 3
    1 2 1
    2 2 1
    1
    2 2 0
    1
    
    예상 출력
    3
    16
    15