← Home
package main

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

type Edge struct {
	to int
	w  int64
}

type Child struct {
	to int
	w  int64
}

type Item struct {
	v  int
	w  int64
	P  int64
	sz 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 a, b int
		var t int64
		fmt.Fscan(in, &a, &b, &t)
		adj[a] = append(adj[a], Edge{to: b, w: t})
		adj[b] = append(adj[b], Edge{to: a, w: t})
	}

	children := make([][]Child, n+1)
	parent := make([]int, n+1)
	order := make([]int, 0, n)
	stack := make([]int, 0, n)
	stack = append(stack, 1)
	parent[1] = -1
	for len(stack) > 0 {
		u := stack[len(stack)-1]
		stack = stack[:len(stack)-1]
		order = append(order, u)
		for _, e := range adj[u] {
			if e.to == parent[u] {
				continue
			}
			parent[e.to] = u
			children[u] = append(children[u], Child{to: e.to, w: e.w})
			stack = append(stack, e.to)
		}
	}

	sz := make([]int, n+1)
	edgeSum := make([]int64, n+1)
	F := make([]int64, n+1)

	for i := len(order) - 1; i >= 0; i-- {
		u := order[i]
		base := 0
		if u != 1 {
			base = 1
		}
		szu := base
		esu := int64(0)
		for _, ch := range children[u] {
			v := ch.to
			w := ch.w
			szu += sz[v]
			esu += w + edgeSum[v]
		}
		sz[u] = szu
		edgeSum[u] = esu

		if len(children[u]) == 0 {
			F[u] = 0
			continue
		}

		items := make([]Item, len(children[u]))
		for idx, ch := range children[u] {
			v := ch.to
			P := 2 * (ch.w + edgeSum[v])
			items[idx] = Item{v: v, w: ch.w, P: P, sz: sz[v]}
		}
		sort.Slice(items, func(i, j int) bool {
			x := items[i].P * int64(items[j].sz)
			y := items[j].P * int64(items[i].sz)
			if x != y {
				return x < y
			}
			return items[i].v < items[j].v
		})

		var Fu int64 = 0
		var D int64 = 0
		for _, it := range items {
			Fu += F[it.v]
			Fu += int64(it.sz) * it.w
			Fu += int64(it.sz) * D
			D += it.P
		}
		F[u] = Fu
	}

	ans := float64(F[1]) / float64(n-1)
	fmt.Fprintf(out, "%.10f\n", ans)
}