만드는 중입니다

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

소수 트리

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

요약
루트가 있는 트리가 주어질 때, 이 트리를 곱으로 나타내는 소수 트리의 최대 개수를 구합니다.
난이도

어려움10점 중 8점

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

문제

Bobo가 뿌리 있는 트리(rooted tree)에 대한 곱셈 연산을 제안한다.

AA와 BB를 임의의 뿌리 있는 트리라고 하자. 그러면 T=A⋅BT = A \cdot B는 AA의 각 정점 xx마다 BB의 복사본을 하나씩 만들고, 그 복사본의 뿌리를 xx와 합쳐서 만든다(자세한 내용은 다음 그림을 참고한다).

분명히 T⋅1=1⋅T=TT \cdot \mathbf{1} = \mathbf{1} \cdot T = T가 성립하며, 여기서 1\mathbf{1}은 정점이 하나뿐인 뿌리 있는 트리이다. 따라서 1\mathbf{1}은 모든 뿌리 있는 트리의 인수이고, 모든 뿌리 있는 트리는 자기 자신의 인수이다. 뿌리 있는 트리 TT의 인수가 TT와 1\mathbf{1}뿐이라면, TT를 소수 트리(prime tree)라고 부른다.

Bobo에게 정점이 nn개인 뿌리 있는 트리 TT가 있다. 정점에는 1,2,…,n1, 2, \dots, n으로 번호가 붙어 있다. Bobo는 TT를 소수 트리들의 곱으로 가능한 한 많이 나타내고 싶어 한다. 즉, 각 TiT_i(1≤i≤m1 \leq i \leq m)가 소수 트리이고 T=T1⋅T2⋯TmT = T_1 \cdot T_2 \cdots T_m을 만족하는 식 중에서 mm이 최대가 되는 식을 찾는다.

1\mathbf{1}은 소수 트리가 아니다.

입력

입력은 0개 이상의 테스트 케이스로 이루어지며, 파일의 끝(EOF)에서 끝난다. 각 테스트 케이스는 다음과 같다.

첫 줄에 정점의 개수 nn이 주어진다(2≤n≤1062 \leq n \leq 10^6).

둘째 줄에는 n−1n - 1개의 정수 p2,p3,…,pnp_2, p_3, \dots, p_n이 주어진다. pip_i는 ii번 정점의 부모이다(1≤pi≤i−11 \leq p_i \leq i - 1).

모든 테스트 케이스의 nn을 더한 값은 10610^6을 넘지 않는다.

출력

각 테스트 케이스에 대해, 소수 인수의 최대 개수를 나타내는 정수를 출력한다.

예제1

  1. 예제 1

    입력
    12
    1 1 1 1 2 2 4 5 5 6 10
    3
    1 1
    6
    1 1 1 2 3
    13
    1 1 1 2 2 3 3 4 5 6 7 8
    
    예상 출력
    3
    1
    2
    1