← Home
For problem statement at 1000-1999/1800-1899/1800-1809/1805/problemD.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1800-1809/1805/verifierD.go ends with All tests passed can you fix the verifier? package main

import (
	"bytes"
	"io"
	"os"
	"strconv"
)

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) NextInt() int {
	for fs.idx < fs.n && (fs.data[fs.idx] < '0' || fs.data[fs.idx] > '9') {
		fs.idx++
	}
	sign := 1
	if fs.idx < fs.n && fs.data[fs.idx] == '-' {
		sign = -1
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n && fs.data[fs.idx] >= '0' && fs.data[fs.idx] <= '9' {
		val = val*10 + int(fs.data[fs.idx]-'0')
		fs.idx++
	}
	return val * sign
}

func bfs(start int, g [][]int) ([]int, int) {
	n := len(g)
	dist := make([]int, n)
	for i := 0; i < n; i++ {
		dist[i] = -1
	}
	q := make([]int, n)
	head, tail := 0, 0
	q[tail] = start
	tail++
	dist[start] = 0
	far := start
	for head < tail {
		v := q[head]
		head++
		if dist[v] > dist[far] {
			far = v
		}
		for _, to := range g[v] {
			if dist[to] == -1 {
				dist[to] = dist[v] + 1
				q[tail] = to
				tail++
			}
		}
	}
	return dist, far
}

func main() {
	fs := NewFastScanner()
	n := fs.NextInt()
	g := make([][]int, n)
	for i := 0; i < n-1; i++ {
		u := fs.NextInt() - 1
		v := fs.NextInt() - 1
		g[u] = append(g[u], v)
		g[v] = append(g[v], u)
	}

	_, a := bfs(0, g)
	da, b := bfs(a, g)
	db, _ := bfs(b, g)
	D := da[b]

	freq := make([]int, n+1)
	for i := 0; i < n; i++ {
		e := da[i]
		if db[i] > e {
			e = db[i]
		}
		freq[e]++
	}

	prefix := make([]int, n+1)
	prefix[0] = freq[0]
	for i := 1; i <= n; i++ {
		prefix[i] = prefix[i-1] + freq[i]
	}

	var out bytes.Buffer
	for k := 1; k <= n; k++ {
		if k > 1 {
			out.WriteByte(' ')
		}
		ans := n
		if k <= D {
			ans = 1 + prefix[k-1]
		}
		out.WriteString(strconv.Itoa(ans))
	}
	out.WriteByte('\n')
	os.Stdout.Write(out.Bytes())
}