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])
}
}