For problem statement at 1000-1999/1800-1899/1850-1859/1851/problemE.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1850-1859/1851/verifierE.go ends with panic: invalid argument to Intn
goroutine 1 [running]:
math/rand.(*Rand).Intn(0x129b48?, 0x40000b20e0?)
/usr/local/go/src/math/rand/rand.go:180 +0x64
main.generate()
/home/ubuntu/codeforces/1000-1999/1800-1899/1850-1859/1851/verifierE.go:47 +0x13c
main.main()
/home/ubuntu/codeforces/1000-1999/1800-1899/1850-1859/1851/verifierE.go:89 +0x114
exit status 2 can you fix the verifier? package main
import (
"bufio"
"io"
"os"
"strconv"
)
type FastScanner struct {
data []byte
idx int
n int
}
func NewFastScanner() *FastScanner {
data, _ := io.ReadAll(bufio.NewReaderSize(os.Stdin, 1<<20))
return &FastScanner{data: data, n: len(data)}
}
func (fs *FastScanner) NextInt() int {
for fs.idx < fs.n {
c := fs.data[fs.idx]
if (c >= '0' && c <= '9') || c == '-' {
break
}
fs.idx++
}
sign := 1
if fs.data[fs.idx] == '-' {
sign = -1
fs.idx++
}
val := 0
for fs.idx < fs.n {
c := fs.data[fs.idx]
if c < '0' || c > '9' {
break
}
val = val*10 + int(c-'0')
fs.idx++
}
return sign * val
}
func main() {
fs := NewFastScanner()
t := fs.NextInt()
out := make([]byte, 0, 1<<20)
for ; t > 0; t-- {
n := fs.NextInt()
k := fs.NextInt()
ans := make([]int64, n+1)
for i := 1; i <= n; i++ {
ans[i] = int64(fs.NextInt())
}
for i := 0; i < k; i++ {
p := fs.NextInt()
ans[p] = 0
}
adj := make([][]int, n+1)
indeg := make([]int, n+1)
hasRecipe := make([]bool, n+1)
for i := 1; i <= n; i++ {
m := fs.NextInt()
if m > 0 {
hasRecipe[i] = true
indeg[i] = m
for j := 0; j < m; j++ {
e := fs.NextInt()
adj[e] = append(adj[e], i)
}
}
}
accum := make([]int64, n+1)
q := make([]int, 0, n)
for i := 1; i <= n; i++ {
if indeg[i] == 0 {
q = append(q, i)
}
}
for head := 0; head < len(q); head++ {
u := q[head]
if hasRecipe[u] && accum[u] < ans[u] {
ans[u] = accum[u]
}
for _, v := range adj[u] {
accum[v] += ans[u]
indeg[v]--
if indeg[v] == 0 {
q = append(q, v)
}
}
}
for i := 1; i <= n; i++ {
out = strconv.AppendInt(out, ans[i], 10)
if i == n {
out = append(out, '\n')
} else {
out = append(out, ' ')
}
}
}
os.Stdout.Write(out)
}