← Home
For problem statement at 0-999/200-299/270-279/274/problemB.txt this is a correct solution, but verifier at 0-999/200-299/270-279/274/verifierB.go ends with All tests passed can you fix the verifier? package main

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

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int64 {
		for idx < len(data) && data[idx] != '-' && (data[idx] < '0' || data[idx] > '9') {
			idx++
		}
		sign := int64(1)
		if data[idx] == '-' {
			sign = -1
			idx++
		}
		var num int64
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			num = num*10 + int64(data[idx]-'0')
			idx++
		}
		return num * sign
	}

	n := int(nextInt())
	g := make([][]int, n+1)
	for i := 0; i < n-1; i++ {
		a := int(nextInt())
		b := int(nextInt())
		g[a] = append(g[a], b)
		g[b] = append(g[b], a)
	}

	val := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		val[i] = nextInt()
	}

	parent := make([]int, n+1)
	order := make([]int, 0, n)
	stack := make([]int, 0, n)
	stack = append(stack, 1)
	parent[1] = -1

	for len(stack) > 0 {
		v := stack[len(stack)-1]
		stack = stack[:len(stack)-1]
		order = append(order, v)
		for _, to := range g[v] {
			if to == parent[v] {
				continue
			}
			parent[to] = v
			stack = append(stack, to)
		}
	}

	pos := make([]int64, n+1)
	neg := make([]int64, n+1)

	for i := len(order) - 1; i >= 0; i-- {
		v := order[i]
		var p, q int64
		for _, to := range g[v] {
			if to == parent[v] {
				continue
			}
			if pos[to] > p {
				p = pos[to]
			}
			if neg[to] > q {
				q = neg[to]
			}
		}
		x := val[v] + p - q
		if x > 0 {
			q += x
		} else {
			p += -x
		}
		pos[v] = p
		neg[v] = q
	}

	out := bufio.NewWriter(os.Stdout)
	fmt.Fprint(out, pos[1]+neg[1])
	out.Flush()
}