만드는 중입니다

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

TreeScript

면접 대비

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

요약
부모 노드 주소를 레지스터에 유지하면서 주어진 루트 트리를 만들 때 필요한 최소 레지스터 개수를 구합니다.
난이도

보통10점 중 6점

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

문제

TreeScript는 트리 구조를 관리하기 위해 만들어진 프로그래밍 언어이다. 이 문제에서는 TreeScript에서 뿌리 있는 트리(rooted tree)를 만드는 방법을 배운다.

TreeScript에서 모든 트리 노드는 메모리에 저장된다. 각 노드는 번호와 부모 노드의 주소를 가진다. 둘 다 변경할 수 없으므로 노드를 만들 때 정해져야 한다. 루트 노드의 부모 주소는 비어 있다.

노드에 접근하려고 노드의 주소를 레지스터에 저장할 수 있다. 레지스터가 mm개 있으면 레지스터는 r\[0],r\[1],…,r\[m−1]r\[0],r\[1],\ldots ,r\[m-1]로 나타낸다.

노드 생성문은 r\[i]=create(r\[j],k);r\[i]=\mathrm{create}(r\[j], k); 이다. 여기서 kk는 노드 번호이고, ii와 jj는 레지스터의 인덱스이며 0≤i,j<m0\le i,j< m이다. i=ji=j인 경우도 가능하다. 이 문장은 번호가 kk인 노드를 만든다. 새 노드의 부모 주소는 r\[j]r\[j]에 있고, 만들어진 노드의 주소는 r\[i]r\[i]에 저장된다. 노드가 올바르게 만들어지면 그 주소를 더 저장할 필요가 없다. 노드는 미리 정의된 명령을 자동으로 실행한다. 공간 문제 때문에 이에 대해서는 나중에 배운다.

학습을 확인하려면 크기가 nn인 뿌리 있는 트리를 만들어야 한다. 시스템이 루트 노드를 만들어 r\[0]r\[0]에 저장하므로, 추가로 실행해야 하는 생성문은 n−1n-1개이다.

레지스터는 비싸므로 필요한 레지스터 개수의 최솟값 mm을 구하라.

입력

테스트케이스가 여러 개 주어진다.

첫 줄에 테스트케이스의 수 TT (1≤T≤1051\le T\le 10^5)가 주어진다.

각 테스트케이스는 다음과 같다.

첫 줄에 트리의 크기 nn (2≤n≤2⋅1052\le n\le 2\cdot 10^5)이 주어진다.

둘째 줄에 정수 p_1,p_2,…,p_np\_1,p\_2,\ldots,p\_n이 주어진다. 노드 p_ip\_i는 노드 ii의 부모 노드이며 1≤p_i<i1\le p\_i< i이다. 특별히 p_1=0p\_1=0이고, 이는 노드 1이 루트임을 뜻한다.

모든 테스트케이스의 nn의 합은 2×1052\times 10^5을 넘지 않는다.

출력

각 테스트케이스마다 답을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    2
    3
    0 1 2
    7
    0 1 2 2 1 4 1
    
    예상 출력
    1
    2