← Home
For problem statement at 1000-1999/1000-1099/1060-1069/1060/problemF.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1060-1069/1060/verifierF.go ends with All tests passed can you fix the verifier? package main

import (
	"fmt"
)

func mul(A, B []float64) []float64 {
	if len(A) == 0 || len(B) == 0 {
		return []float64{}
	}
	C := make([]float64, len(A)+len(B)-1)
	for i, a := range A {
		for j, b := range B {
			C[i+j] += a * b
		}
	}
	return C
}

func transform(P []float64) []float64 {
	d := len(P) - 1
	Q := make([]float64, d+2)
	var constTerm float64 = 0
	for i, p := range P {
		constTerm += p / float64(i+1)
		Q[i+1] = p * float64(2*(i+1)-1) / float64(2*(i+1))
	}
	Q[0] = constTerm / 2.0
	return Q
}

func dfs(u, p int, adj [][]int) []float64 {
	P := []float64{1.0}
	for _, v := range adj[u] {
		if v != p {
			fv := dfs(v, u, adj)
			P = mul(P, fv)
		}
	}
	if p == 0 {
		return P
	}
	return transform(P)
}

func main() {
	var n int
	if _, err := fmt.Scan(&n); err != nil {
		return
	}
	adj := make([][]int, n+1)
	for i := 0; i < n-1; i++ {
		var u, v int
		fmt.Scan(&u, &v)
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	for i := 1; i <= n; i++ {
		P := dfs(i, 0, adj)
		fmt.Printf("%.9f", P[0])
		if i < n {
			fmt.Print(" ")
		}
	}
	fmt.Println()
}