For problem statement at 1000-1999/1000-1099/1030-1039/1037/problemD.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1030-1039/1037/verifierD.go ends with All tests passed can you fix the verifier? package main
import (
"fmt"
"io"
"os"
)
type FastScanner struct {
data []byte
idx int
n int
}
func NewFastScanner() *FastScanner {
data, _ := io.ReadAll(os.Stdin)
return &FastScanner{data: data, n: len(data)}
}
func (fs *FastScanner) NextInt() int {
for fs.idx < fs.n && (fs.data[fs.idx] < '0' || fs.data[fs.idx] > '9') {
fs.idx++
}
val := 0
for fs.idx < fs.n && fs.data[fs.idx] >= '0' && fs.data[fs.idx] <= '9' {
val = val*10 + int(fs.data[fs.idx]-'0')
fs.idx++
}
return val
}
func main() {
fs := NewFastScanner()
n := fs.NextInt()
g := make([][]int, n+1)
for i := 0; i < n-1; i++ {
x := fs.NextInt()
y := fs.NextInt()
g[x] = append(g[x], y)
g[y] = append(g[y], x)
}
seq := make([]int, n)
for i := 0; i < n; i++ {
seq[i] = fs.NextInt()
}
if seq[0] != 1 {
fmt.Print("No")
return
}
parent := make([]int, n+1)
children := make([]int, n+1)
stack := make([]int, 1, n)
stack[0] = 1
parent[1] = -1
for len(stack) > 0 {
v := stack[len(stack)-1]
stack = stack[:len(stack)-1]
for _, u := range g[v] {
if u == parent[v] {
continue
}
parent[u] = v
children[v]++
stack = append(stack, u)
}
}
q := make([]int, n)
head, tail := 0, 0
q[tail] = 1
tail++
idx := 1
ok := true
for head < tail && ok {
v := q[head]
head++
c := children[v]
if idx+c > n {
ok = false
break
}
for i := 0; i < c; i++ {
u := seq[idx]
if parent[u] != v {
ok = false
break
}
q[tail] = u
tail++
idx++
}
}
if ok && idx == n && tail == n {
fmt.Print("Yes")
} else {
fmt.Print("No")
}
}