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
}
```