For problem statement at 1000-1999/1500-1599/1570-1579/1578/problemL.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1570-1579/1578/verifierL.go ends with case 1 failed: expected 2 got -1
input:
5 9
6
3
2
5
6
2 5 1
4 3 2
1 4 8
4 1 3
1 4 6
5 3 7
3 2 8
2 5 9
5 3 10
exit status 1 can you fix the verifier? package main
import (
"fmt"
"io"
"math"
"os"
"sort"
)
type Edge struct {
u, v int
w int64
}
var data []byte
var pos int
func nextInt() int64 {
for pos < len(data) && data[pos] <= ' ' {
pos++
}
if pos >= len(data) {
return 0
}
var res int64
for pos < len(data) && data[pos] > ' ' {
res = res*10 + int64(data[pos]-'0')
pos++
}
return res
}
func min(a, b int64) int64 {
if a < b {
return a
}
return b
}
func main() {
data, _ = io.ReadAll(os.Stdin)
n := int(nextInt())
m := int(nextInt())
if n == 0 {
return
}
c := make([]int64, n+1)
for i := 1; i <= n; i++ {
c[i] = nextInt()
}
edges := make([]Edge, m)
for i := 0; i < m; i++ {
edges[i] = Edge{
u: int(nextInt()),
v: int(nextInt()),
w: nextInt(),
}
}
sort.Slice(edges, func(i, j int) bool {
return edges[i].w > edges[j].w
})
dsu := make([]int, 2*n)
for i := 1; i < 2*n; i++ {
dsu[i] = i
}
var find func(i int) int
find = func(i int) int {
if dsu[i] == i {
return i
}
dsu[i] = find(dsu[i])
return dsu[i]
}
val := make([]int64, 2*n)
sum_c := make([]int64, 2*n)
for i := 1; i <= n; i++ {
sum_c[i] = c[i]
}
children := make([][2]int, 2*n)
idx := n
for _, e := range edges {
ru := find(e.u)
rv := find(e.v)
if ru != rv {
idx++
dsu[ru] = idx
dsu[rv] = idx
val[idx] = e.w
sum_c[idx] = sum_c[ru] + sum_c[rv]
children[idx] = [2]int{ru, rv}
}
}
max_W := make([]int64, 2*n)
max_W[idx] = math.MaxInt64
for i := idx; i > n; i-- {
u := children[i][0]
v := children[i][1]
max_W[u] = min(max_W[i], val[i]+sum_c[u])
max_W[v] = min(max_W[i], val[i]+sum_c[v])
}
ans := int64(-1)
total_c := sum_c[idx]
for i := 1; i <= n; i++ {
w_start := max_W[i] - total_c
if w_start > ans {
ans = w_start
}
}
if ans <= 0 {
fmt.Println("-1")
} else {
fmt.Println(ans)
}
}