← Home
package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int {
		for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return val
	}

	n := nextInt()
	parent := make([]int, n+1)
	hasChild := make([]bool, n+1)

	for i := 2; i <= n; i++ {
		p := nextInt()
		parent[i] = p
		hasChild[p] = true
	}

	sum := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		sum[i] = int64(nextInt())
	}

	leaves := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		if !hasChild[i] {
			leaves[i] = 1
		}
	}

	for i := n; i >= 2; i-- {
		p := parent[i]
		sum[p] += sum[i]
		leaves[p] += leaves[i]
	}

	var ans int64
	for i := 1; i <= n; i++ {
		cur := (sum[i] + leaves[i] - 1) / leaves[i]
		if cur > ans {
			ans = cur
		}
	}

	fmt.Print(ans)
}