← Home
For problem statement at 2000-2999/2000-2099/2050-2059/2057/problemE1.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2050-2059/2057/verifierE1.go ends with All tests passed. can you fix the verifier? ```go
package main

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

type Edge struct {
	to int
	w  int
}

const INF int32 = 2000000000

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

func writeInt(writer *bufio.Writer, n int32) {
	if n == 0 {
		writer.WriteByte('0')
		return
	}
	var buf [12]byte
	i := 11
	for n > 0 {
		buf[i] = byte(n%10) + '0'
		n /= 10
		i--
	}
	writer.Write(buf[i+1:])
}

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

	t := nextInt(reader)
	if t == 0 {
		return
	}

	maxN := 405
	minW := make([]int32, maxN*maxN*maxN)
	deque := make([]int, 3000)
	dist := make([]int, maxN)
	expanded := make([]bool, maxN)

	for tc := 0; tc < t; tc++ {
		n := nextInt(reader)
		m := nextInt(reader)
		q := nextInt(reader)

		adj := make([][]Edge, n+1)
		weights := make([]int, 0, m)

		for i := 0; i < m; i++ {
			u := nextInt(reader)
			v := nextInt(reader)
			w := nextInt(reader)
			adj[u] = append(adj[u], Edge{v, w})
			adj[v] = append(adj[v], Edge{u, w})
			weights = append(weights, w)
		}

		sort.Ints(weights)
		uniqueW := make([]int, 0, m)
		for i, w := range weights {
			if i == 0 || w != weights[i-1] {
				uniqueW = append(uniqueW, w)
			}
		}

		for s := 1; s <= n; s++ {
			for t_node := 1; t_node <= n; t_node++ {
				base := s*maxN*maxN + t_node*maxN
				for d := 0; d <= n; d++ {
					minW[base+d] = INF
				}
			}
		}

		for _, W_i := range uniqueW {
			for s := 1; s <= n; s++ {
				for i := 1; i <= n; i++ {
					dist[i] = n
					expanded[i] = false
				}
				dist[s] = 0

				head, tail := 1500, 1500
				deque[tail] = s
				tail++

				for head < tail {
					u := deque[head]
					head++

					if expanded[u] {
						continue
					}
					expanded[u] = true

					for _, edge := range adj[u] {
						cost := 0
						if edge.w > W_i {
							cost = 1
						}
						if dist[u]+cost < dist[edge.to] {
							dist[edge.to] = dist[u] + cost
							if cost == 0 {
								head--
								deque[head] = edge.to
							} else {
								deque[tail] = edge.to
								tail++
							}
						}
					}
				}

				for t_node := 1; t_node <= n; t_node++ {
					d := dist[t_node]
					if d <= n {
						idx := s*maxN*maxN + t_node*maxN + d
						if minW[idx] == INF {
							minW[idx] = int32(W_i)
						}
					}
				}
			}
		}

		for s := 1; s <= n; s++ {
			for t_node := 1; t_node <= n; t_node++ {
				base := s*maxN*maxN + t_node*maxN
				for d := 1; d <= n; d++ {
					if minW[base+d-1] < minW[base+d] {
						minW[base+d] = minW[base+d-1]
					}
				}
			}
		}

		for i := 0; i < q; i++ {
			u := nextInt(reader)
			v := nextInt(reader)
			k := nextInt(reader)
			d := k - 1
			if d > n {
				d = n
			}
			ans := minW[u*maxN*maxN+v*maxN+d]
			if i > 0 {
				writer.WriteByte(' ')
			}
			writeInt(writer, ans)
		}
		writer.WriteByte('\n')
	}
}
```