← Home
```go
package main

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

type FastReader struct {
	r *bufio.Reader
}

func NewFastReader() *FastReader {
	return &FastReader{r: bufio.NewReaderSize(os.Stdin, 1<<20)}
}

func (fr *FastReader) nextByte() byte {
	b, _ := fr.r.ReadByte()
	return b
}

func (fr *FastReader) NextInt() int {
	b := fr.nextByte()
	for b <= ' ' {
		b = fr.nextByte()
	}
	sign := 1
	if b == '-' {
		sign = -1
		b = fr.nextByte()
	}
	val := 0
	for b >= '0' && b <= '9' {
		val = val*10 + int(b-'0')
		b = fr.nextByte()
	}
	return sign * val
}

func (fr *FastReader) NextString() string {
	b := fr.nextByte()
	for b <= ' ' {
		b = fr.nextByte()
	}
	buf := make([]byte, 0, 16)
	for b > ' ' {
		buf = append(buf, b)
		b = fr.nextByte()
	}
	return string(buf)
}

func main() {
	in := NewFastReader()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	t := in.NextInt()
	for ; t > 0; t-- {
		n := in.NextInt()
		s := in.NextString()
		sb := []byte(s)
		left := make([]int, n+1)
		right := make([]int, n+1)
		for i := 1; i <= n; i++ {
			left[i] = in.NextInt()
			right[i] = in.NextInt()
		}

		cost := make([]int, n+1)
		ans := int(1<<60 - 1)
		stack := make([]int, 0, n)
		stack = append(stack, 1)

		for len(stack) > 0 {
			v := stack[len(stack)-1]
			stack = stack[:len(stack)-1]
			lv, rv := left[v], right[v]
			if lv == 0 && rv == 0 {
				if cost[v] < ans {
					ans = cost[v]
				}
			}
			if lv != 0 {
				c := cost[v]
				if sb[v-1] != 'L' {
					c++
				}
				cost[lv] = c
				stack = append(stack, lv)
			}
			if rv != 0 {
				c := cost[v]
				if sb[v-1] != 'R' {
					c++
				}
				cost[rv] = c
				stack = append(stack, rv)
			}
		}
		fmt.Fprintln(out, ans)
	}
}
```