package main import ( "bufio" "fmt" "os" ) var in = bufio.NewReader(os.Stdin) var out = bufio.NewWriter(os.Stdout) func readAlpha(b *byte) error { c, err := in.ReadByte() for ; err == nil && (c < 'A' || c > 'Z'); c, err = in.ReadByte() { } for ; err == nil && c >= 'A' && c <= 'Z'; c, err = in.ReadByte() { *b = c return nil } return err } func readInt(b *int) error { ans, read := 0, false c, err := in.ReadByte() for ; err == nil && (c < '0' || c > '9'); c, err = in.ReadByte() { } for ; err == nil && c >= '0' && c <= '9'; c, err = in.ReadByte() { ans = ans *10 + int(c-'0') read = true } if read { *b = ans return nil } return err } func main() { defer out.Flush() var n, q int readInt(&n) var edge = make([][]int, n+1) var dp = make([]int, n+1) var cost = make([]int, n+1) for i := 2; i <= n; i++ { var fa int readInt(&fa) edge[fa] = append(edge[fa], i) } for i:= 1; i <= n; i++ { var c byte readAlpha(&c) if c == 'R' { cost[i] =1 } } var dfs func(int, int) dfs = func(root, fa int) { dp[root] = cost[root] for _, item := range edge[root] { if item == fa { continue } dfs(item, root) dp[root] += dp[item] } } dfs(1, -1) readInt(&q) for i := 0; i < q; i++ { var val int readInt(&val) fmt.Fprintln(out, dp[val]) } }