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)
}