For problem statement at 0-999/700-799/760-769/765/problemE.txt this is a correct solution, but verifier at 0-999/700-799/760-769/765/verifierE.go ends with All tests passed! can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
if _, err := fmt.Fscan(reader, &n); err != nil {
return
}
origAdj := make([][]int, n+1)
for i := 0; i < n-1; i++ {
var u, v int
fmt.Fscan(reader, &u, &v)
origAdj[u] = append(origAdj[u], v)
origAdj[v] = append(origAdj[v], u)
}
maxD := 0
for i := 1; i <= n; i++ {
if len(origAdj[i]) > maxD {
maxD = len(origAdj[i])
}
}
if maxD <= 2 {
length := n - 1
for length > 0 && length%2 == 0 {
length /= 2
}
fmt.Println(length)
return
}
important := make([]bool, n+1)
for i := 1; i <= n; i++ {
if len(origAdj[i]) != 2 {
important[i] = true
}
}
adj := make(map[int]map[int]int)
for i := 1; i <= n; i++ {
if important[i] {
adj[i] = make(map[int]int)
}
}
for i := 1; i <= n; i++ {
if important[i] {
for _, nxt := range origAdj[i] {
prev := i
curr := nxt
length := 1
for !important[curr] {
var nextNode int
for _, nn := range origAdj[curr] {
if nn != prev {
nextNode = nn
break
}
}
prev = curr
curr = nextNode
length++
}
if i < curr {
adj[i][curr] = length
adj[curr][i] = length
}
}
}
}
deg3Count := 0
activeLeaves := make(map[int]bool)
for u := range adj {
if len(adj[u]) >= 3 {
deg3Count++
} else if len(adj[u]) == 1 {
activeLeaves[u] = true
}
}
for deg3Count > 0 {
leavesList := make([]int, 0, len(activeLeaves))
for leaf := range activeLeaves {
leavesList = append(leavesList, leaf)
}
type LeafBranch struct {
leaf int
length int
}
branches := make(map[int][]LeafBranch)
for _, leaf := range leavesList {
for neighbor, length := range adj[leaf] {
branches[neighbor] = append(branches[neighbor], LeafBranch{leaf, length})
}
}
deletedAny := false
for u, brs := range branches {
byLen := make(map[int][]LeafBranch)
for _, br := range brs {
byLen[br.length] = append(byLen[br.length], br)
}
for _, list := range byLen {
if len(list) > 1 {
for i := 1; i < len(list); i++ {
deletedAny = true
leaf := list[i].leaf
delete(adj[u], leaf)
delete(adj[leaf], u)
delete(activeLeaves, leaf)
oldDeg := len(adj[u]) + 1
if oldDeg == 3 {
deg3Count--
}
}
}
}
}
if !deletedAny {
fmt.Println("-1")
return
}
deg2Queue := []int{}
for u := range branches {
if len(adj[u]) == 2 {
deg2Queue = append(deg2Queue, u)
} else if len(adj[u]) == 1 {
activeLeaves[u] = true
}
}
for len(deg2Queue) > 0 {
u := deg2Queue[0]
deg2Queue = deg2Queue[1:]
if len(adj[u]) != 2 {
continue
}
neighbors := make([]int, 0, 2)
lengths := make([]int, 0, 2)
for v, l := range adj[u] {
neighbors = append(neighbors, v)
lengths = append(lengths, l)
}
v, w := neighbors[0], neighbors[1]
L1, L2 := lengths[0], lengths[1]
delete(adj[v], u)
delete(adj[w], u)
delete(adj, u)
adj[v][w] = L1 + L2
adj[w][v] = L1 + L2
}
}
length := 0
for u := range adj {
for _, l := range adj[u] {
length += l
}
}
length /= 2
for length > 0 && length%2 == 0 {
length /= 2
}
fmt.Println(length)
}