CF235D Graph Game

题目描述

在计算机科学中,有一种称为“按点分治”(Divide And Conquer By Node)的方法,用于解决一些关于树上路径的难题。让我们通过如下函数描述该方法: $ solve(t) $($ t $ 是一棵树): 1. 在树 $ t $ 中选择一个节点 $ x $(通常选择“重心”)。我们把这一步称为“步骤A”。 2. 处理所有经过 $ x $ 的路径。 3. 从树 $ t $ 中删除 $ x $。 4. 此时 $ t $ 变成一些子树。 5. 对每棵子树递归调用 $ solve $。 当 $ t $ 只剩一个节点时过程结束,因为删掉它之后就什么也没有了。 现在,WJMZBMR 错误地认为在“步骤A”中选任意一个节点都可以,所以他会随机选择一个节点。此外,更糟糕的是,他认为“树”应该有与节点数相等的边数!于是该过程变成了如下形式: 我们定义变量 $ totalCost $,其初始值为 $ 0 $。现在 $ solve(t) $(此时 $ t $ 是一张图)定义为: 1. $ totalCost = totalCost + (|t|) $。操作“=”表示赋值,$ |t| $ 表示 $ t $ 中的节点数。 2. 随机(等概率)选择图 $ t $ 中的一个节点 $ x $。 3. 从图 $ t $ 中删除 $ x $。 4. 此时 $ t $ 变成若干连通分量。 5. 对每个连通分量递归调用 $ solve $。 他会在一个有 $ n $ 个节点和 $ n $ 条边的连通图上应用 $ solve $。他以为算法会很快,但实际上很慢。现在他想知道这个过程的 $ totalCost $ 的期望值。你能帮助他吗?

输入格式

第一行包含一个整数 $ n $($ 3 \leq n \leq 3000 $)——图中的节点数和边数。接下来的 $ n $ 行,每行包含两个用空格分隔的整数 $ a_{i},b_{i} $($ 0 \leq a_{i},b_{i} \leq n-1 $),表示一条连接 $ a_{i} $ 和 $ b_{i} $ 的边。 假定图的节点编号为 $ 0 $ 到 $ n-1 $。保证该图无自环、无重边,且图是连通的。

输出格式

输出一个实数,表示 $ totalCost $ 的期望值。如果你的答案的绝对误差或相对误差不超过 $ 10^{-6} $,则被视为正确。

说明/提示

考虑第二个样例。无论第一次选择什么节点,$ totalCost $ 总是 $ 3+2+1=6 $。 由 ChatGPT 5 翻译