```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
if _, err := fmt.Fscan(reader, &t); err != nil {
return
}
for i := 0; i < t; i++ {
var n int
fmt.Fscan(reader, &n)
children := make([][]int, n+1)
for j := 2; j <= n; j++ {
var p int
fmt.Fscan(reader, &p)
children[p] = append(children[p], j)
}
order := make([]int, 0, n)
queue := make([]int, 0, n)
queue = append(queue, 1)
head := 0
for head < len(queue) {
u := queue[head]
head++
order = append(order, u)
for _, v := range children[u] {
queue = append(queue, v)
}
}
A := make([]int, n+1)
totalPairs := 0
for j := n - 1; j >= 0; j-- {
u := order[j]
S := 0
M := 0
for _, v := range children[u] {
S += A[v]
if A[v] > M {
M = A[v]
}
}
pairs := 0
if M > S/2 {
pairs = S - M
} else {
pairs = S / 2
}
totalPairs += pairs
A[u] = S - 2*pairs + 1
}
fmt.Fprintln(writer, totalPairs)
}
}
```