首页 > 试题广场 >

小红的魔法树探险

[编程题]小红的魔法树探险
  • 热度指数:6 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}小红在神秘森林中发现一棵魔法树,树有 n 个节点(编号 1n),由 n - 1 条无向边连接成树状。她从 1 号节点注入魔力(1 号节点默认激活),随后魔力从 1 号节点开始,每一步从当前所在节点出发,从它的所有邻点中等概率(独立)选择一个并沿该边移动到该邻点。
\hspace{15pt}若魔力到达未激活节点则激活它并继续流动,若到达已激活节点则魔力消散。
\hspace{15pt}求魔力消散时已经被激活的节点数量的期望值。

\hspace{15pt}可以证明答案可以表示为一个不可约分数 \tfrac{p}{q},为了避免精度问题,请直接输出整数 \left(p \times q^{-1} \bmod M\right) 作为答案,其中 M = (10^9+7)q^{-1} 是满足 q\times q^{-1} \equiv 1 \pmod{M} 的整数。更具体地,你需要找到一个整数 x \in [0, M) 满足 x \times qM 取模等于 p,您可以查看样例解释得到更具体的说明。

输入描述:
\hspace{15pt}第一行输入一个整数 n \left(2 \leqq n \leqq 10^5\right),表示节点数量。
\hspace{15pt}此后 n - 1 行,第 i 行输入两个整数 u_iv_i \left(1 \leqq u_i, v_i \leqq n\right),表示第 i 条树边连接节点 u_iv_i


输出描述:
\hspace{15pt}输出一个整数,表示魔力消散时已经被激活的节点数量的期望值对 (10^9+7) 取模的结果。
示例1

输入

3
1 2
2 3

输出

500000006

说明

\hspace{15pt}在这个样例中,树为 1 - 2 - 3 的链。从节点 1 开始,魔力到节点 2 使其激活。在节点 2 时,有 \tfrac{1}{2} 概率到已激活的节点 1,此时激活 2 个节点;有 \tfrac{1}{2} 概率到节点 3 使其激活,之后魔力消散,此时激活 3 个节点。期望为 2 \times \tfrac{1}{2} + 3 \times \tfrac{1}{2} = \tfrac{5}{2}

\hspace{15pt}我们能够找到,500\,000\,006 \times 2 = 1\,000\,000\,012,对 (10^9+7) 取模后恰好等于分子 5,所以 500\,000\,006 是需要输出的答案。
示例2

输入

4
1 2
1 3
2 4

输出

250000004
示例3

输入

4
2 3
2 4
2 1

输出

666666674
头像 Kendieer
发表于 2026-02-01 20:18:55
参考代码放在最后面。 思路 A.小红的大小判断 按照题意模拟即可,其实只要特判 是相等情况,其余都是 更大。 B.小红的大小再判断 按照题意模拟即可,可以使用 std::reverse 快速翻转。 C.小红的肥鹅健身房 把所有非空元素用 std::map 存储,然后遍历时每数量逢二进一即可。 展开全文