← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n int
	fmt.Fscan(in, &n)

	op := make([]int, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(in, &op[i])
	}

	children := make([][]int, n+1)
	for i := 2; i <= n; i++ {
		var p int
		fmt.Fscan(in, &p)
		children[p] = append(children[p], i)
	}

	k := 0
	for i := 1; i <= n; i++ {
		if len(children[i]) == 0 {
			k++
		}
	}

	order := make([]int, 0, n)
	stack := []int{1}
	for len(stack) > 0 {
		v := stack[len(stack)-1]
		stack = stack[:len(stack)-1]
		order = append(order, v)
		for _, u := range children[v] {
			stack = append(stack, u)
		}
	}

	dp := make([]int, n+1)
	for i := len(order) - 1; i >= 0; i-- {
		v := order[i]
		if len(children[v]) == 0 {
			dp[v] = 1
		} else if op[v] == 1 {
			minVal := dp[children[v][0]]
			for j := 1; j < len(children[v]); j++ {
				if dp[children[v][j]] < minVal {
					minVal = dp[children[v][j]]
				}
			}
			dp[v] = minVal
		} else {
			sum := 0
			for _, u := range children[v] {
				sum += dp[u]
			}
			dp[v] = sum
		}
	}

	fmt.Fprintln(out, k-dp[1]+1)
}
```