TreeScript
면접 대비시간 제한1초메모리 제한1024 MB
부모 노드 주소를 레지스터에 유지하면서 주어진 루트 트리를 만들 때 필요한 최소 레지스터 개수를 구합니다.
문제
TreeScript는 트리 구조를 관리하기 위해 만들어진 프로그래밍 언어이다. 이 문제에서는 TreeScript에서 뿌리 있는 트리(rooted tree)를 만드는 방법을 배운다.
TreeScript에서 모든 트리 노드는 메모리에 저장된다. 각 노드는 번호와 부모 노드의 주소를 가진다. 둘 다 변경할 수 없으므로 노드를 만들 때 정해져야 한다. 루트 노드의 부모 주소는 비어 있다.
노드에 접근하려고 노드의 주소를 레지스터에 저장할 수 있다. 레지스터가 개 있으면 레지스터는 로 나타낸다.
노드 생성문은 이다. 여기서 는 노드 번호이고, 와 는 레지스터의 인덱스이며 이다. 인 경우도 가능하다. 이 문장은 번호가 인 노드를 만든다. 새 노드의 부모 주소는 에 있고, 만들어진 노드의 주소는 에 저장된다. 노드가 올바르게 만들어지면 그 주소를 더 저장할 필요가 없다. 노드는 미리 정의된 명령을 자동으로 실행한다. 공간 문제 때문에 이에 대해서는 나중에 배운다.
학습을 확인하려면 크기가 인 뿌리 있는 트리를 만들어야 한다. 시스템이 루트 노드를 만들어 에 저장하므로, 추가로 실행해야 하는 생성문은 개이다.
레지스터는 비싸므로 필요한 레지스터 개수의 최솟값 을 구하라.
입력
테스트케이스가 여러 개 주어진다.
첫 줄에 테스트케이스의 수 ()가 주어진다.
각 테스트케이스는 다음과 같다.
첫 줄에 트리의 크기 ()이 주어진다.
둘째 줄에 정수 이 주어진다. 노드 는 노드 의 부모 노드이며 이다. 특별히 이고, 이는 노드 1이 루트임을 뜻한다.
모든 테스트케이스의 의 합은 을 넘지 않는다.
출력
각 테스트케이스마다 답을 한 줄에 출력한다.