← Home
For problem statement at 0-999/700-799/730-739/735/problemE.txt this is a correct solution, but verifier at 0-999/700-799/730-739/735/verifierE.go ends with test 1 failed
input:
4 0
1 2
2 3
1 4
expected:8
got:1

exit status 1 can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, k int
	if _, err := fmt.Fscan(reader, &n, &k); err != nil {
		return
	}

	adj := make([][]int, n+1)
	for i := 0; i < n-1; i++ {
		var u, v int
		fmt.Fscan(reader, &u, &v)
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	MOD := 1000000007

	dp := make([][]int, n+1)
	for i := 1; i <= n; i++ {
		dp[i] = make([]int, 2*k+1)
	}

	var dfs func(u, p int)
	dfs = func(u, p int) {
		dp[u][0] = 1
		if k+1 <= 2*k {
			dp[u][k+1] = 1
		}

		for _, v := range adj[u] {
			if v == p {
				continue
			}
			dfs(v, u)

			nextDp := make([]int, 2*k+1)
			for i := 0; i <= 2*k; i++ {
				if dp[u][i] == 0 {
					continue
				}
				for j := 0; j <= 2*k; j++ {
					if dp[v][j] == 0 {
						continue
					}

					cU := i
					if i > k {
						cU = 1000000000
					}
					dU := -1000000000
					if i > k {
						dU = i - k - 1
					}

					cV := j + 1
					if j > k {
						cV = 1000000000
					}
					dV := -1000000000
					if j > k {
						dV = j - k
					}

					newC := cU
					if cV < newC {
						newC = cV
					}

					newD := -1000000000
					if dU != -1000000000 && dU+cV > k {
						if dU > newD {
							newD = dU
						}
					}
					if dV != -1000000000 && dV+cU > k {
						if dV > newD {
							newD = dV
						}
					}

					var newState int
					if newD != -1000000000 {
						newState = newD + k + 1
					} else {
						newState = newC
					}

					if newState <= 2*k {
						nextDp[newState] = (nextDp[newState] + (dp[u][i]*dp[v][j])%MOD) % MOD
					}
				}
			}
			for i := 0; i <= 2*k; i++ {
				dp[u][i] = nextDp[i]
			}
		}
	}

	dfs(1, 0)

	ans := 0
	for i := 0; i <= k; i++ {
		ans = (ans + dp[1][i]) % MOD
	}
	fmt.Println(ans)
}