For problem statement at 1000-1999/1000-1099/1080-1089/1088/problemF.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1080-1089/1088/verifierF.go ends with All tests passed can you fix the verifier? ```go
package main
import (
"fmt"
"io"
"math/bits"
"os"
)
func main() {
buf := make([]byte, 65536)
var pos, length int
readByte := func() byte {
if pos >= length {
pos = 0
var err error
length, err = os.Stdin.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if length == 0 {
return 0
}
}
b := buf[pos]
pos++
return b
}
readInt := func() int {
b := readByte()
for b <= ' ' {
if b == 0 {
return 0
}
b = readByte()
}
res := 0
for b > ' ' {
res = res*10 + int(b-'0')
b = readByte()
}
return res
}
n := readInt()
if n == 0 {
return
}
a := make([]int64, n+1)
minA := int64(2e18)
R := -1
for i := 1; i <= n; i++ {
a[i] = int64(readInt())
if a[i] < minA {
minA = a[i]
R = i
}
}
head := make([]int, n+1)
for i := 1; i <= n; i++ {
head[i] = -1
}
edges := make([]int, 2*(n-1))
next := make([]int, 2*(n-1))
edgeCnt := 0
addEdge := func(u, v int) {
edges[edgeCnt] = v
next[edgeCnt] = head[u]
head[u] = edgeCnt
edgeCnt++
}
for i := 0; i < n-1; i++ {
u := readInt()
v := readInt()
addEdge(u, v)
addEdge(v, u)
}
var ans int64
path := make([]int, n+1)
var dfs func(u, p, d int)
dfs = func(u, p, d int) {
path[d] = u
if d > 0 {
minCost := int64(2e18)
for k := 0; (1 << k) <= d; k++ {
anc := path[d-(1<<k)]
cost := a[anc] * int64(1+k)
if cost < minCost {
minCost = cost
}
}
costRoot := a[R] * int64(1+bits.Len(uint(d-1)))
if costRoot < minCost {
minCost = costRoot
}
ans += a[u] + minCost
}
for e := head[u]; e != -1; e = next[e] {
v := edges[e]
if v != p {
dfs(v, u, d+1)
}
}
}
dfs(R, 0, 0)
fmt.Println(ans)
}
```