For problem statement at 1000-1999/1200-1299/1230-1239/1239/problemD.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1230-1239/1239/verifierD.go ends with case 1 failed:
expected:
Yes
1 4
1
2 3 4 5
got:
Yes
1 4
5
1 2 3 4
input:
1
5 1
2 1
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Buffer(make([]byte, 1024*1024*10), 1024*1024*10)
scanner.Split(bufio.ScanWords)
var readInt = func() int {
scanner.Scan()
res := 0
for _, b := range scanner.Bytes() {
res = res*10 + int(b-'0')
}
return res
}
if !scanner.Scan() {
return
}
res := 0
for _, b := range scanner.Bytes() {
res = res*10 + int(b-'0')
}
t := res
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
for tc := 0; tc < t; tc++ {
n := readInt()
m := readInt()
adj := make([][]int, n+1)
rev_adj := make([][]int, n+1)
for i := 0; i < m; i++ {
u := readInt()
v := readInt()
if u != v {
adj[u] = append(adj[u], v)
rev_adj[v] = append(rev_adj[v], u)
}
}
visited := make([]bool, n+1)
order := make([]int, 0, n)
stack := make([]int, 0, n)
edge_idx := make([]int, n+1)
for i := 1; i <= n; i++ {
if !visited[i] {
visited[i] = true
stack = append(stack, i)
for len(stack) > 0 {
u := stack[len(stack)-1]
if edge_idx[u] < len(rev_adj[u]) {
v := rev_adj[u][edge_idx[u]]
edge_idx[u]++
if !visited[v] {
visited[v] = true
stack = append(stack, v)
}
} else {
stack = stack[:len(stack)-1]
order = append(order, u)
}
}
}
}
for i := 1; i <= n; i++ {
visited[i] = false
}
v := order[n-1]
visited[v] = true
stack = stack[:0]
stack = append(stack, v)
for len(stack) > 0 {
u := stack[len(stack)-1]
stack = stack[:len(stack)-1]
for _, nxt := range adj[u] {
if !visited[nxt] {
visited[nxt] = true
stack = append(stack, nxt)
}
}
}
var J []int
var P []int
for i := 1; i <= n; i++ {
if visited[i] {
J = append(J, i)
} else {
P = append(P, i)
}
}
if len(J) == n {
fmt.Fprintln(out, "No")
} else {
fmt.Fprintln(out, "Yes")
fmt.Fprintf(out, "%d %d\n", len(J), len(P))
for i, val := range J {
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, val)
}
fmt.Fprintln(out)
for i, val := range P {
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, val)
}
fmt.Fprintln(out)
}
}
}