For problem statement at 2000-2999/2100-2199/2110-2119/2114/problemE.txt this is a correct solution, but verifier at 2000-2999/2100-2199/2110-2119/2114/verifierE.go ends with All 61 tests passed. can you fix the verifier? package main
import (
"io"
"os"
"strconv"
)
type State struct {
v, p, depth int
pref, mn, mx int64
}
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
}
t := nextInt()
out := make([]byte, 0, 1<<20)
for ; t > 0; t-- {
n := nextInt()
a := make([]int64, n+1)
for i := 1; i <= n; i++ {
a[i] = int64(nextInt())
}
head := make([]int, n+1)
for i := 1; i <= n; i++ {
head[i] = -1
}
to := make([]int, 2*(n-1))
nxt := make([]int, 2*(n-1))
edgeID := 0
addEdge := func(u, v int) {
to[edgeID] = v
nxt[edgeID] = head[u]
head[u] = edgeID
edgeID++
}
for i := 0; i < n-1; i++ {
u := nextInt()
v := nextInt()
addEdge(u, v)
addEdge(v, u)
}
ans := make([]int64, n+1)
stack := make([]State, 0, n)
stack = append(stack, State{v: 1, p: 0, depth: 0, pref: a[1], mn: 0, mx: 0})
for len(stack) > 0 {
s := stack[len(stack)-1]
stack = stack[:len(stack)-1]
if s.depth&1 == 0 {
ans[s.v] = s.pref - s.mn
} else {
ans[s.v] = s.mx - s.pref
}
mn2 := s.mn
if s.pref < mn2 {
mn2 = s.pref
}
mx2 := s.mx
if s.pref > mx2 {
mx2 = s.pref
}
nd := s.depth + 1
for e := head[s.v]; e != -1; e = nxt[e] {
u := to[e]
if u == s.p {
continue
}
cp := s.pref
if nd&1 == 0 {
cp += a[u]
} else {
cp -= a[u]
}
stack = append(stack, State{v: u, p: s.v, depth: nd, pref: cp, mn: mn2, mx: mx2})
}
}
for i := 1; i <= n; i++ {
out = strconv.AppendInt(out, ans[i], 10)
if i == n {
out = append(out, '\n')
} else {
out = append(out, ' ')
}
}
}
os.Stdout.Write(out)
}