← Home
For problem statement at 2000-2999/2100-2199/2110-2119/2117/problemG.txt this is a correct solution, but verifier at 2000-2999/2100-2199/2110-2119/2117/verifierG.go ends with  can you fix the verifier? ```go
package main

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

type Edge struct {
	u, v int
	w    int64
}

type DSU struct {
	parent []int
	size   []int
}

func NewDSU(n int) *DSU {
	parent := make([]int, n)
	size := make([]int, n)
	for i := 0; i < n; i++ {
		parent[i] = i
		size[i] = 1
	}
	return &DSU{parent, size}
}

func (d *DSU) Find(x int) int {
	if d.parent[x] != x {
		d.parent[x] = d.Find(d.parent[x])
	}
	return d.parent[x]
}

func (d *DSU) Union(x, y int) {
	x = d.Find(x)
	y = d.Find(y)
	if x == y {
		return
	}
	if d.size[x] < d.size[y] {
		x, y = y, x
	}
	d.parent[y] = x
	d.size[x] += d.size[y]
}

func (d *DSU) Connected(x, y int) bool {
	return d.Find(x) == d.Find(y)
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	fmt.Fscan(reader, &t)
	for tc := 0; tc < t; tc++ {
		var n, m int
		fmt.Fscan(reader, &n, &m)
		edges := make([]Edge, m)
		for i := 0; i < m; i++ {
			var u, v int
			var w int64
			fmt.Fscan(reader, &u, &v, &w)
			edges[i] = Edge{u - 1, v - 1, w}
		}

		sort.Slice(edges, func(i, j int) bool {
			return edges[i].w < edges[j].w
		})

		B := int(math.Sqrt(float64(m))) + 1
		const INF int64 = 1<<62 - 1
		ans := INF

		for start := 0; start < m; start += B {
			end := start + B
			if end > m {
				end = m
			}
			dsu := NewDSU(n)
			right := end
			for left := end - 1; left >= start; left-- {
				dsu.Union(edges[left].u, edges[left].v)
				for right < m && !dsu.Connected(0, n-1) {
					dsu.Union(edges[right].u, edges[right].v)
					right++
				}
				if dsu.Connected(0, n-1) {
					cost := edges[left].w + edges[right-1].w
					if cost < ans {
						ans = cost
					}
				}
			}
		}

		fmt.Fprintln(writer, ans)
	}
}
```