For problem statement at 1000-1999/1200-1299/1210-1219/1213/problemG.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1210-1219/1213/verifierG.go ends with All tests passed can you fix the verifier? ```go
package main
import (
"bufio"
"io"
"os"
"sort"
"strconv"
)
type FastScanner struct {
data []byte
idx int
n int
}
func NewFastScanner() *FastScanner {
data, _ := io.ReadAll(os.Stdin)
return &FastScanner{data: data, n: len(data)}
}
func (fs *FastScanner) NextInt() int {
for fs.idx < fs.n && (fs.data[fs.idx] < '0' || fs.data[fs.idx] > '9') {
fs.idx++
}
sign := 1
if fs.idx < fs.n && fs.data[fs.idx] == '-' {
sign = -1
fs.idx++
}
val := 0
for fs.idx < fs.n && fs.data[fs.idx] >= '0' && fs.data[fs.idx] <= '9' {
val = val*10 + int(fs.data[fs.idx]-'0')
fs.idx++
}
return val * sign
}
type Edge struct {
u int
v int
w int
}
type Query struct {
q int
idx int
}
type DSU struct {
parent []int
size []int
}
func NewDSU(n int) *DSU {
parent := make([]int, n+1)
size := make([]int, n+1)
for i := 1; i <= n; i++ {
parent[i] = i
size[i] = 1
}
return &DSU{parent: parent, size: size}
}
func (d *DSU) Find(x int) int {
for d.parent[x] != x {
d.parent[x] = d.parent[d.parent[x]]
x = d.parent[x]
}
return x
}
func (d *DSU) Union(a, b int) int64 {
ra := d.Find(a)
rb := d.Find(b)
if ra == rb {
return 0
}
if d.size[ra] < d.size[rb] {
ra, rb = rb, ra
}
res := int64(d.size[ra]) * int64(d.size[rb])
d.parent[rb] = ra
d.size[ra] += d.size[rb]
return res
}
func main() {
fs := NewFastScanner()
n := fs.NextInt()
m := fs.NextInt()
edges := make([]Edge, n-1)
for i := 0; i < n-1; i++ {
edges[i] = Edge{
u: fs.NextInt(),
v: fs.NextInt(),
w: fs.NextInt(),
}
}
queries := make([]Query, m)
for i := 0; i < m; i++ {
queries[i] = Query{
q: fs.NextInt(),
idx: i,
}
}
sort.Slice(edges, func(i, j int) bool {
return edges[i].w < edges[j].w
})
sort.Slice(queries, func(i, j int) bool {
return queries[i].q < queries[j].q
})
dsu := NewDSU(n)
ans := make([]int64, m)
var cur int64
e := 0
for _, qu := range queries {
for e < n-1 && edges[e].w <= qu.q {
cur += dsu.Union(edges[e].u, edges[e].v)
e++
}
ans[qu.idx] = cur
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
for i := 0; i < m; i++ {
if i > 0 {
out.WriteByte(' ')
}
out.WriteString(strconv.FormatInt(ans[i], 10))
}
out.WriteByte('\n')
out.Flush()
}
```