Codeforces Round 781 (Div. 2)
C
Tree Infection
Codeforces
1600
原题
← BD →
翻译中…

A tree is a connected graph without cycles. A rooted tree has a special vertex called the root. The parent of a vertex $v$ (different from root) is the previous to $v$ vertex on the shortest path from the root to the vertex $v$. Children of the vertex $v$ are all vertices for which $v$ is the parent.

翻译中…

You are given a rooted tree with $n$ vertices. The vertex $1$ is the root. Initially, all vertices are healthy.

翻译中…

Each second you do two operations, the spreading operation and, after that, the injection operation:

翻译中…
  1. Spreading: for each vertex $v$, if at least one child of $v$ is infected, you can spread the disease by infecting at most one other child of $v$ of your choice.
  2. Injection: you can choose any healthy vertex and infect it.
翻译中…

This process repeats each second until the whole tree is infected. You need to find the minimal number of seconds needed to infect the whole tree.

翻译中…

Input

翻译中…

The input consists of multiple test cases. The first line contains a single integer $t$ ($1 \le t \le 10^4$) — the number of test cases. Description of the test cases follows.

翻译中…

The first line of each test case contains a single integer $n$ ($2 \le n \le 2 \cdot 10^5$) — the number of the vertices in the given tree.

翻译中…

The second line of each test case contains $n - 1$ integers $p_2, p_3, \ldots, p_n$ ($1 \le p_i \le n$), where $p_i$ is the ancestor of the $i$-th vertex in the tree.

翻译中…

It is guaranteed that the given graph is a tree.

翻译中…

It is guaranteed that the sum of $n$ over all test cases doesn't exceed $2 \cdot 10^5$.

翻译中…

Output

翻译中…

For each test case you should output a single integer — the minimal number of seconds needed to infect the whole tree.

翻译中…

Note

翻译中…

The image depicts the tree from the first test case during each second.

翻译中…

A vertex is black if it is not infected. A vertex is blue if it is infected by injection during the previous second. A vertex is green if it is infected by spreading during the previous second. A vertex is red if it is infected earlier than the previous second.

翻译中…

image

翻译中…

Note that you are able to choose which vertices are infected by spreading and by injections.

翻译中…

样例

Input #1
5
7
1 1 1 2 2 4
5
5 5 1 4
2
1
3
3 1
6
1 1 1 1 1
Output #1
4
4
2
3
4
InputCopy OutputCopy
题目信息
题号
1665C
时间限制
1 s
内存限制
256 MB
标签
二分
贪心
排序
树

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。