← Home
For problem statement at 1000-1999/1600-1699/1630-1639/1637/problemF.txt this is a correct solution, but verifier at 1000-1999/1600-1699/1630-1639/1637/verifierF.go ends with case 1 failed
expected: 13
got: 18

exit status 1 can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

func readInt(reader *bufio.Reader) int {
	var n int
	var c byte
	var err error
	for {
		c, err = reader.ReadByte()
		if err != nil {
			return n
		}
		if c >= '0' && c <= '9' {
			break
		}
	}
	for {
		n = n*10 + int(c-'0')
		c, err = reader.ReadByte()
		if err != nil || c < '0' || c > '9' {
			break
		}
	}
	return n
}

func main() {
	reader := bufio.NewReaderSize(os.Stdin, 65536)
	n := readInt(reader)

	h := make([]int, n+1)
	maxH := -1
	root := -1
	for i := 1; i <= n; i++ {
		h[i] = readInt(reader)
		if h[i] > maxH {
			maxH = h[i]
			root = i
		}
	}

	adj := make([][]int, n+1)
	for i := 0; i < n-1; i++ {
		u := readInt(reader)
		v := readInt(reader)
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	var totalSum int64

	var dfs func(u, p int) int
	dfs = func(u, p int) int {
		var childVals []int
		for _, v := range adj[u] {
			if v != p {
				childVals = append(childVals, dfs(v, u))
			}
		}

		if len(childVals) == 0 {
			return h[u]
		}

		maxVal := childVals[0]
		maxIdx := 0
		for i := 1; i < len(childVals); i++ {
			if childVals[i] > maxVal {
				maxVal = childVals[i]
				maxIdx = i
			}
		}

		for i, val := range childVals {
			if i != maxIdx {
				totalSum += int64(val)
			}
		}

		if maxVal < h[u] {
			maxVal = h[u]
		}
		return maxVal
	}

	var childVals []int
	for _, v := range adj[root] {
		childVals = append(childVals, dfs(v, root))
	}

	if len(childVals) == 0 {
		totalSum += int64(h[root]) * 2
	} else if len(childVals) == 1 {
		totalSum += int64(h[root]) * 2
	} else {
		sort.Slice(childVals, func(i, j int) bool {
			return childVals[i] > childVals[j]
		})
		totalSum += int64(h[root]) * 2
		for i := 2; i < len(childVals); i++ {
			totalSum += int64(childVals[i])
		}
	}

	fmt.Println(totalSum)
}