For problem statement at 1000-1999/1400-1499/1430-1439/1433/problemG.txt this is a correct solution, but verifier at 1000-1999/1400-1499/1430-1439/1433/verifierG.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
type edge struct{ to, w int }
type road struct{ u, v int }
type route struct{ a, b int }
type pq struct {
v []int
d []int
}
func (q *pq) push(v, d int) {
q.v = append(q.v, v)
q.d = append(q.d, d)
q.up(len(q.v) - 1)
}
func (q *pq) pop() (int, int) {
v, d := q.v[0], q.d[0]
n := len(q.v) - 1
q.v[0], q.d[0] = q.v[n], q.d[n]
q.v = q.v[:n]
q.d = q.d[:n]
q.down(0, n)
return v, d
}
func (q *pq) up(i int) {
for i > 0 {
p := (i - 1) / 2
if q.d[i] >= q.d[p] {
break
}
q.v[i], q.v[p] = q.v[p], q.v[i]
q.d[i], q.d[p] = q.d[p], q.d[i]
i = p
}
}
func (q *pq) down(i, n int) {
for {
l := 2*i + 1
if l >= n {
break
}
j := l
if r := l + 1; r < n && q.d[r] < q.d[l] {
j = r
}
if q.d[i] <= q.d[j] {
break
}
q.v[i], q.v[j] = q.v[j], q.v[i]
q.d[i], q.d[j] = q.d[j], q.d[i]
i = j
}
}
func main() {
in := bufio.NewReader(os.Stdin)
var n, m, k int
if _, err := fmt.Fscan(in, &n, &m, &k); err != nil {
return
}
adj := make([][]edge, n+1)
roads := make([]road, m)
for i := 0; i < m; i++ {
var u, v, w int
fmt.Fscan(in, &u, &v, &w)
adj[u] = append(adj[u], edge{v, w})
adj[v] = append(adj[v], edge{u, w})
roads[i] = road{u, v}
}
routes := make([]route, k)
for i := 0; i < k; i++ {
fmt.Fscan(in, &routes[i].a, &routes[i].b)
}
dist := make([][]int, n+1)
for i := 1; i <= n; i++ {
dist[i] = make([]int, n+1)
for j := 1; j <= n; j++ {
dist[i][j] = int(1e18)
}
dist[i][i] = 0
q := &pq{v: make([]int, 0, 10000), d: make([]int, 0, 10000)}
q.push(i, 0)
for len(q.v) > 0 {
u, d := q.pop()
if d > dist[i][u] {
continue
}
for _, e := range adj[u] {
if nd := d + e.w; nd < dist[i][e.to] {
dist[i][e.to] = nd
q.push(e.to, nd)
}
}
}
}
ans := int(1e18)
for _, rd := range roads {
sum := 0
for _, rt := range routes {
d := dist[rt.a][rt.b]
d1 := dist[rt.a][rd.u] + dist[rd.v][rt.b]
if d1 < d {
d = d1
}
d2 := dist[rt.a][rd.v] + dist[rd.u][rt.b]
if d2 < d {
d = d2
}
sum += d
}
if sum < ans {
ans = sum
}
}
fmt.Println(ans)
}