For problem statement at 1000-1999/1200-1299/1290-1299/1296/problemF.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1290-1299/1296/verifierF.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
type Edge struct {
to, idx int
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n int
if _, err := fmt.Fscan(in, &n); err != nil {
return
}
adj := make([][]Edge, n+1)
for i := 0; i < n-1; i++ {
var u, v int
fmt.Fscan(in, &u, &v)
adj[u] = append(adj[u], Edge{v, i})
adj[v] = append(adj[v], Edge{u, i})
}
var m int
fmt.Fscan(in, &m)
type Query struct {
u, v, g int
}
queries := make([]Query, m)
for i := 0; i < m; i++ {
fmt.Fscan(in, &queries[i].u, &queries[i].v, &queries[i].g)
}
ans := make([]int, n-1)
for i := 0; i < n-1; i++ {
ans[i] = 1
}
parent := make([]int, n+1)
parentEdge := make([]int, n+1)
visited := make([]int, n+1)
visitID := 0
q := make([]int, n)
for _, query := range queries {
visitID++
head, tail := 0, 0
q[tail] = query.u
tail++
visited[query.u] = visitID
for head < tail {
u := q[head]
head++
if u == query.v {
break
}
for _, edge := range adj[u] {
if visited[edge.to] != visitID {
visited[edge.to] = visitID
parent[edge.to] = u
parentEdge[edge.to] = edge.idx
q[tail] = edge.to
tail++
}
}
}
curr := query.v
for curr != query.u {
idx := parentEdge[curr]
if query.g > ans[idx] {
ans[idx] = query.g
}
curr = parent[curr]
}
}
for _, query := range queries {
visitID++
head, tail := 0, 0
q[tail] = query.u
tail++
visited[query.u] = visitID
for head < tail {
u := q[head]
head++
if u == query.v {
break
}
for _, edge := range adj[u] {
if visited[edge.to] != visitID {
visited[edge.to] = visitID
parent[edge.to] = u
parentEdge[edge.to] = edge.idx
q[tail] = edge.to
tail++
}
}
}
curr := query.v
minG := 1000000000
for curr != query.u {
idx := parentEdge[curr]
if ans[idx] < minG {
minG = ans[idx]
}
curr = parent[curr]
}
if minG != query.g {
fmt.Fprintln(out, "-1")
return
}
}
for i := 0; i < n-1; i++ {
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, ans[i])
}
fmt.Fprintln(out)
}