← Home
For problem statement at 0-999/800-899/840-849/847/problemL.txt this is a correct solution, but verifier at 0-999/800-899/840-849/847/verifierL.go ends with wrong answer on test 1
expected:
-1

actual: can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Buffer(make([]byte, 1024*1024), 10*1024*1024)

	if !scanner.Scan() {
		return
	}

	nStr := strings.TrimSpace(scanner.Text())
	for nStr == "" {
		if !scanner.Scan() {
			return
		}
		nStr = strings.TrimSpace(scanner.Text())
	}

	n, err := strconv.Atoi(nStr)
	if err != nil || n < 2 {
		return
	}

	size := make([][]int, n+1)
	for i := range size {
		size[i] = make([]int, n+1)
	}

	for i := 1; i <= n; {
		if !scanner.Scan() {
			break
		}
		line := strings.ReplaceAll(scanner.Text(), " ", "")
		if line == "" {
			continue
		}

		lists := strings.Split(line, "-")
		for _, list := range lists {
			parts := strings.Split(list, ":")
			if len(parts) != 2 {
				continue
			}
			count, _ := strconv.Atoi(parts[0])
			vertices := strings.Split(parts[1], ",")
			for _, vStr := range vertices {
				v, _ := strconv.Atoi(vStr)
				if v >= 1 && v <= n {
					size[i][v] = count
				}
			}
		}
		i++
	}

	var edges [][2]int
	for i := 1; i <= n; i++ {
		for j := i + 1; j <= n; j++ {
			if size[i][j]+size[j][i] == n {
				edges = append(edges, [2]int{i, j})
			}
		}
	}

	if len(edges) != n-1 {
		fmt.Println("-1")
		return
	}

	parent := make([]int, n+1)
	for i := 1; i <= n; i++ {
		parent[i] = i
	}

	var find func(int) int
	find = func(i int) int {
		if parent[i] == i {
			return i
		}
		parent[i] = find(parent[i])
		return parent[i]
	}

	for _, edge := range edges {
		rootI := find(edge[0])
		rootJ := find(edge[1])
		if rootI == rootJ {
			fmt.Println("-1")
			return
		}
		parent[rootI] = rootJ
	}

	fmt.Println(n - 1)
	for _, edge := range edges {
		fmt.Printf("%d %d\n", edge[0], edge[1])
	}
}