← Home
For problem statement at 0-999/100-199/190-199/190/problemE.txt this is a correct solution, but verifier at 0-999/100-199/190-199/190/verifierE.go ends with case 5 failed:
input:
5 7
1 2
2 3
1 5
3 5
3 4
1 3
2 4

expected:
2
4 1 2 4 5
1 3
actual:
2
1 3
4 1 2 4 5
exit status 1 can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"sort"
)

func main() {
	buffer, _ := io.ReadAll(os.Stdin)
	pos := 0
	readInt := func() int {
		for pos < len(buffer) && (buffer[pos] < '0' || buffer[pos] > '9') {
			pos++
		}
		if pos >= len(buffer) {
			return 0
		}
		res := 0
		for pos < len(buffer) && buffer[pos] >= '0' && buffer[pos] <= '9' {
			res = res*10 + int(buffer[pos]-'0')
			pos++
		}
		return res
	}

	n := readInt()
	if n == 0 {
		return
	}
	m := readInt()

	headEdge := make([]int, n+1)
	for i := 0; i <= n; i++ {
		headEdge[i] = -1
	}
	to := make([]int, 2*m)
	nxtEdge := make([]int, 2*m)
	edgeCnt := 0
	addEdge := func(u, v int) {
		to[edgeCnt] = v
		nxtEdge[edgeCnt] = headEdge[u]
		headEdge[u] = edgeCnt
		edgeCnt++
	}

	for i := 0; i < m; i++ {
		u := readInt()
		v := readInt()
		addEdge(u, v)
		addEdge(v, u)
	}

	next := make([]int, n+2)
	prev := make([]int, n+2)
	for i := 1; i <= n; i++ {
		next[i] = i + 1
		prev[i] = i - 1
	}
	next[n] = 0
	prev[1] = 0
	head := 1

	isAdj := make([]bool, n+1)
	var components [][]int
	queue := make([]int, 0, n)

	for head != 0 {
		start := head
		head = next[start]
		if head != 0 {
			prev[head] = 0
		}

		queue = queue[:0]
		queue = append(queue, start)
		comp := []int{}

		for len(queue) > 0 {
			u := queue[0]
			queue = queue[1:]
			comp = append(comp, u)

			for e := headEdge[u]; e != -1; e = nxtEdge[e] {
				isAdj[to[e]] = true
			}

			curr := head
			for curr != 0 {
				nxt := next[curr]
				if !isAdj[curr] {
					if prev[curr] != 0 {
						next[prev[curr]] = nxt
					} else {
						head = nxt
					}
					if nxt != 0 {
						prev[nxt] = prev[curr]
					}
					queue = append(queue, curr)
				}
				curr = nxt
			}

			for e := headEdge[u]; e != -1; e = nxtEdge[e] {
				isAdj[to[e]] = false
			}
		}
		components = append(components, comp)
	}

	sort.Slice(components, func(i, j int) bool {
		return len(components[i]) < len(components[j])
	})

	out := bufio.NewWriter(os.Stdout)
	fmt.Fprintln(out, len(components))
	for _, comp := range components {
		sort.Ints(comp)
		fmt.Fprint(out, len(comp))
		for _, v := range comp {
			fmt.Fprint(out, " ", v)
		}
		fmt.Fprintln(out)
	}
	out.Flush()
}