← Home
For problem statement at 1000-1999/1500-1599/1570-1579/1572/problemA.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1570-1579/1572/verifierA.go ends with All tests passed can you fix the verifier? package main

import (
	"io"
	"os"
	"strconv"
	"strings"
)

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	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' {
			break
		}
		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 val
}

func main() {
	fs := NewFastScanner()
	t := fs.NextInt()
	var out strings.Builder

	for ; t > 0; t-- {
		n := fs.NextInt()
		head := make([]int, n+1)
		for i := 1; i <= n; i++ {
			head[i] = -1
		}
		indeg := make([]int, n+1)
		dp := make([]int, n+1)
		to := make([]int, 0)
		next := make([]int, 0)

		for i := 1; i <= n; i++ {
			k := fs.NextInt()
			indeg[i] = k
			dp[i] = 1
			for j := 0; j < k; j++ {
				x := fs.NextInt()
				to = append(to, i)
				next = append(next, head[x])
				head[x] = len(to) - 1
			}
		}

		q := make([]int, 0, n)
		for i := 1; i <= n; i++ {
			if indeg[i] == 0 {
				q = append(q, i)
			}
		}

		cnt := 0
		ans := 1
		for l := 0; l < len(q); l++ {
			u := q[l]
			cnt++
			if dp[u] > ans {
				ans = dp[u]
			}
			for e := head[u]; e != -1; e = next[e] {
				v := to[e]
				val := dp[u]
				if u > v {
					val++
				}
				if val > dp[v] {
					dp[v] = val
				}
				indeg[v]--
				if indeg[v] == 0 {
					q = append(q, v)
				}
			}
		}

		if cnt < n {
			out.WriteString("-1\n")
		} else {
			out.WriteString(strconv.Itoa(ans))
			out.WriteByte('\n')
		}
	}

	os.Stdout.WriteString(out.String())
}