← Home
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")
	}
}