← Home
For problem statement at 1000-1999/1300-1399/1310-1319/1310/problemD.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1310-1319/1310/verifierD.go ends with test 1 failed
input:
4 6
9 1 4 6
8 7 9 4
10 8 6 9
3 4 3 2

expected:26
got:25

exit status 1 can you fix the verifier?  ```go
package main

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

const INF = 1 << 60

func main() {
	sc := bufio.NewScanner(os.Stdin)
	sc.Split(bufio.ScanWords)
	sc.Scan()
	n := atoi(sc.Text())
	sc.Scan()
	k := atoi(sc.Text())
	m := k / 2

	c := make([][]int, n)
	for i := 0; i < n; i++ {
		c[i] = make([]int, n)
		for j := 0; j < n; j++ {
			sc.Scan()
			c[i][j] = atoi(sc.Text())
		}
	}

	// best[a][b] = list of up to 6 best (y, cost) for c[a][y]+c[y][b], y!=0, y!=a,b
	best := make([][][][2]int, n)
	for a := 0; a < n; a++ {
		best[a] = make([][][2]int, n)
		for b := 0; b < n; b++ {
			arr := make([][2]int, 0, 6)
			for y := 1; y < n; y++ {
				if y == a || y == b {
					continue
				}
				val := c[a][y] + c[y][b]
				arr = append(arr, [2]int{val, y})
			}
			sort.Slice(arr, func(i, j int) bool { return arr[i][0] < arr[j][0] })
			if len(arr) > 6 {
				arr = arr[:6]
			}
			best[a][b] = arr
		}
	}

	ans := INF

	var dfs func(pos int, prev int, mask uint64, cur int)
	dfs = func(pos int, prev int, mask uint64, cur int) {
		if cur >= ans {
			return
		}
		if pos == m-1 {
			// last edge to city 0
			for _, p := range best[prev][0] {
				y := p[1]
				if mask&(1<<uint(y)) == 0 {
					total := cur + p[0]
					if total < ans {
						ans = total
					}
					return
				}
			}
			return
		}
		for x := 0; x < n; x++ {
			newMask := mask | (1 << uint(x))
			// get min for edge prev->x via some y not in mask (and not 0,etc prechecked)
			list := best[prev][x]
			found := false
			var val int
			for _, p := range list {
				y := p[1]
				if mask&(1<<uint(y)) == 0 {
					val = p[0]
					found = true
					break
				}
			}
			if !found {
				continue
			}
			dfs(pos+1, x, newMask, cur+val)
		}
	}

	startMask := uint64(1 << 0) // city 0 is used
	dfs(0, 0, startMask, 0)

	fmt.Println(ans)
}

func atoi(s string) int {
	r := 0
	for _, ch := range s {
		r = r*10 + int(ch-'0')
	}
	return r
}
```