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