For problem statement at 1000-1999/1600-1699/1620-1629/1626/problemE.txt this is a correct solution, but verifier at 1000-1999/1600-1699/1620-1629/1626/verifierE.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
buf := make([]byte, 1024*1024)
scanner.Buffer(buf, 10*1024*1024)
scanInt := func() int {
scanner.Scan()
res, _ := strconv.Atoi(scanner.Text())
return res
}
if !scanner.Scan() {
return
}
n, _ := strconv.Atoi(scanner.Text())
c := make([]int, n+1)
totBlack := 0
for i := 1; i <= n; i++ {
c[i] = scanInt()
if c[i] == 1 {
totBlack++
}
}
adj := make([][]int, n+1)
for i := 0; i < n-1; i++ {
u := scanInt()
v := scanInt()
adj[u] = append(adj[u], v)
adj[v] = append(adj[v], u)
}
sub := make([]int, n+1)
revAdj := make([][]int, n+1)
var dfs func(int, int)
dfs = func(u, p int) {
if c[u] == 1 {
sub[u] = 1
}
for _, v := range adj[u] {
if v != p {
dfs(v, u)
sub[u] += sub[v]
C_uv := sub[v]
if c[v] == 1 || C_uv >= 2 {
revAdj[v] = append(revAdj[v], u)
}
C_vu := totBlack - sub[v]
if c[u] == 1 || C_vu >= 2 {
revAdj[u] = append(revAdj[u], v)
}
}
}
}
dfs(1, 0)
queue := make([]int, 0, n)
visited := make([]bool, n+1)
for i := 1; i <= n; i++ {
if c[i] == 1 {
visited[i] = true
queue = append(queue, i)
}
}
for head := 0; head < len(queue); head++ {
u := queue[head]
for _, v := range revAdj[u] {
if !visited[v] {
visited[v] = true
queue = append(queue, v)
}
}
}
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
for i := 1; i <= n; i++ {
if visited[i] {
out.WriteString("1 ")
} else {
out.WriteString("0 ")
}
}
out.WriteString("\n")
}