For problem statement at 2000-2999/2100-2199/2100-2109/2109/problemD.txt this is a correct solution, but verifier at 2000-2999/2100-2199/2100-2109/2109/verifierD.go ends with All 35 tests passed can you fix the verifier? package main
import (
"bufio"
"os"
)
func nextInt(r *bufio.Reader) int {
var res int
b, err := r.ReadByte()
if err != nil {
return 0
}
for b <= ' ' {
b, err = r.ReadByte()
if err != nil {
return 0
}
}
for b > ' ' {
res = res*10 + int(b-'0')
b, err = r.ReadByte()
if err != nil {
break
}
}
return res
}
func main() {
r := bufio.NewReaderSize(os.Stdin, 65536)
w := bufio.NewWriterSize(os.Stdout, 65536)
defer w.Flush()
t := nextInt(r)
for i := 0; i < t; i++ {
n := nextInt(r)
m := nextInt(r)
l := nextInt(r)
minOdd := int64(-1)
sumAll := int64(0)
for j := 0; j < l; j++ {
a := int64(nextInt(r))
sumAll += a
if a%2 != 0 {
if minOdd == -1 || a < minOdd {
minOdd = a
}
}
}
adj := make([][]int, n+1)
for j := 0; j < m; j++ {
u := nextInt(r)
v := nextInt(r)
adj[u] = append(adj[u], v)
adj[v] = append(adj[v], u)
}
var L_even, L_odd int64
if sumAll%2 == 0 {
L_even = sumAll
if minOdd != -1 {
L_odd = sumAll - minOdd
} else {
L_odd = -1
}
} else {
L_odd = sumAll
L_even = sumAll - minOdd
}
if L_even < 0 {
L_even = 0
}
d0 := make([]int64, n+1)
d1 := make([]int64, n+1)
for j := 1; j <= n; j++ {
d0[j] = -1
d1[j] = -1
}
d0[1] = 0
queue := make([]int, 0, 4*n)
queue = append(queue, 1, 0)
head := 0
for head < len(queue) {
u := queue[head]
p := queue[head+1]
head += 2
if p == 0 {
d := d0[u]
for _, v := range adj[u] {
if d1[v] == -1 {
d1[v] = d + 1
queue = append(queue, v, 1)
}
}
} else {
d := d1[u]
for _, v := range adj[u] {
if d0[v] == -1 {
d0[v] = d + 1
queue = append(queue, v, 0)
}
}
}
}
result := make([]byte, n)
for j := 1; j <= n; j++ {
canReach := false
if d0[j] != -1 && d0[j] <= L_even {
canReach = true
}
if L_odd != -1 && d1[j] != -1 && d1[j] <= L_odd {
canReach = true
}
if canReach {
result[j-1] = '1'
} else {
result[j-1] = '0'
}
}
w.Write(result)
w.WriteByte('\n')
}
}