만드는 중입니다

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

최소 공통 조상과 쿼리

시간 제한5초메모리 제한1536 MB

요약
루트가 1인 트리에서 각 질의의 K개 정점을 받아 모든 쌍의 LCA 레벨을 더한 값을 구합니다.
난이도

보통10점 중 6점

유형
트리, 정렬, DFS
정답자
아직 제출이 없습니다

문제

NN개의 정점으로 이루어진 트리 TT가 주어졌을 때, 다음 쿼리를 수행하는 프로그램을 작성하시오.

  • K V1 V2 ⋯ VKK \ V_1 \ V_2 \ \cdots \ V_K: 1≤i<j≤K1 \leq i < j \leq K인 모든 (i,j)(i, j) 쌍에 대해 ViV_i번 정점과 VjV_j번 정점의 LCA의 레벨의 합을 출력한다.

TT의 루트 정점은 1번 정점이다. 루트 정점의 레벨은 0이며, 다른 정점의 레벨은 (부모 정점의 레벨) + 1로 정의한다.

두 정점 u,vu, v의 LCA는 u,vu, v의 공통 조상 중 가장 가까운 정점(최소 공통 조상)을 의미한다.

입력

첫째 줄에 정점의 개수 NN과 쿼리의 개수 QQ가 주어진다.

둘째 줄에는 2,3,⋯ ,N2, 3, \cdots, N번 정점의 부모 정점 P2,P3,⋯ ,PNP_2, P_3, \cdots, P_N이 주어진다.

다음 QQ개의 줄에는 쿼리 K V1 V2 ⋯ VKK \ V_1 \ V_2 \ \cdots \ V_K가 공백으로 구분되어 주어진다.

출력

각각의 쿼리마다 한 줄에 하나씩 결과를 출력한다.

제한

  • 2≤N≤500 0002 \leq N \leq 500\,000
  • 1≤Q≤500 0001 \leq Q \leq 500\,000
  • 2≤i≤N2 \leq i \leq N에 대해 1≤Pi<i1 \leq P_i < i
  • 2≤K≤N2 \leq K \leq N
  • 모든 쿼리에서 KK의 합은 1 000 0001\,000\,000 이하
  • 1≤Vi≤N1 \leq V_i \leq N
  • i≠ji \neq j 이면 Vi≠VjV_i \neq V_j

예제1

  1. 예제 1

    입력
    16 4
    1 2 3 4 3 1 7 8 9 7 11 12 1 14 15
    2 4 5
    2 10 13
    3 4 6 16
    4 4 10 6 13
    
    예상 출력
    3
    1
    2
    3