1 条题解

  • 1
    @ 2026-10-8 21:39:44

    一共有 nn 个人,通信网络构成一棵 nn 个节点、n−1n-1 条边的树。要让所有人都获得所有消息,在树上任何一条边 (u,v)(u, v) 上,信息至少需要从 u→vu \to v 传递一次,且从 v→uv \to u 传递一次。 因此,最小的传递总次数(即最小轮数)必定为 2(n−1)2(n-1)。在这个最小轮数下,每条边恰好在两个方向各传递一次。

    我们可以把整个传递过程看作一个“汇聚”再“分发”的过程。必然存在某一个节点 RR 作为信息的“集散中心”:

    1. 汇聚阶段:所有节点将信息向节点 RR 传递。此时树上的边全部指向 RR。
    2. 分发阶段:节点 RR 收集齐所有信息后,再将完整的信息向外分发给所有节点。此时树上的边全部背离 RR。

    在操作序列中,所有指向 RR 的边必定在所有背离 RR 的边之前完成传递。

    • 对于指向 RR 的边:一个节点必须先收到所有子节点的信息,才能将信息传递给它的父节点。这相当于对“指向 RR 的有向树”的边进行拓扑排序。
    • 对于背离 RR 的边:一个节点必须先收到父节点传来的完整信息,才能将信息继续向下传递。这相当于对“背离 RR 的有向树”的边进行拓扑排序。

    假设我们枚举节点 RR 作为信息的集散中心。

    当树以 RR 为根时,设 szR(u)sz_R(u) 表示以 uu 为根的子树的大小(节点个数)。

    分发阶段的方案数 Wout(R)W_{out}(R):

    这相当于求一棵有向树(边由根向外)的拓扑排序方案数。对于一棵有向外向树,其节点拓扑排序的经典公式为:

    $$W_{out}(R) = \frac{(n-1)!}{\prod_{v \neq R} sz_R(v)}$$

    对于这个组合数的说明:

    假设树中一共有 nn 个节点,如果我们不考虑任何父子拓扑约束,这 nn 个节点的任意排列方案总数是 n!n!。

    现在我们加入树结构的约束条件:对于树上的任意一个节点 uu,节点 uu 必须排在它所属子树(大小为 sz(u)sz(u))内所有节点的最前面。

    在 n!n! 种全排列中,考察节点 uu 及其子树内的所有节点(共 sz(u)sz(u) 个)。在这 sz(u)sz(u) 个节点的相对顺序中,节点 uu 恰好排在第 1 位的概率显然是:

    P(u)=1sz(u)P(u) = \frac{1}{sz(u)}

    由于树结构的特殊性质(每棵子树的约束是嵌套或互相独立的),对于树上所有节点 uu,满足“ uu 在其子树中排第一”这一条件的概率是相互独立的。因此,一个随机排列能同时满足所有父子节点拓扑关系的概率为:

    Ptotal=∏u∈V1sz(u)P_{total} = \prod_{u \in V} \frac{1}{sz(u)}

    用总排列数乘以合法概率,即可得到合法的拓扑排序总方案数:

    $$W = n! \times \prod_{u \in V} \frac{1}{sz(u)} = \frac{n!}{\prod_{u \in V} sz(u)}$$

    由于根节点 RR 的子树大小 sz(R)=nsz(R) = n,我们可以将根节点的项单独提取出来与分子约分:

    $$W = \frac{n!}{n \times \prod_{v \neq R} sz(v)} = \frac{(n-1)!}{\prod_{v \neq R} sz(v)}$$

    另一个视角:

    我们可以利用分治与动态规划的思想,从底向上合并子树的排列方案。

    假设当前节点为 uu,它的子节点分别为 v1,v2,…,vkv_1, v_2, \ldots, v_k。

    已知每个子节点 viv_i 所在的子树的内部拓扑排序方案数为 W(vi)W(v_i),且该子树的大小为 sz(vi)sz(v_i)。

    当我们处理节点 uu 的子树时:

    1. 节点 uu 必须固定放在序列的第一个位置。
    2. 剩下的 sz(u)−1sz(u) - 1 个位置,需要分配给 kk 棵相互独立的子树。
    3. 把 sz(u)−1sz(u) - 1 个元素划分为 kk 个集合(大小分别为 sz(v1),sz(v2),…,sz(vk)sz(v_1), sz(v_2), \ldots, sz(v_k)),这就相当于一个多重集的排列问题,分配位置的方案数为:$\frac{(sz(u) - 1)!}{sz(v_1)! \times sz(v_2)! \times \dots \times sz(v_k)!}$

    除了位置的分配,每棵子树内部还有各自的合法排序方案,因此根据乘法原理,以 uu 为根的子树总方案数 W(u)W(u) 为:

    $$W(u) = \left( \prod_{i=1}^k W(v_i) \right) \times \frac{(sz(u) - 1)!}{\prod_{i=1}^k sz(v_i)!}$$

    如果我们将这个递推式从根节点 RR 开始一层层向下展开,所有的 W(vi)W(v_i) 会继续向下拆解。在完全展开后你会发现:

    • 每一层展开产生的阶乘分子 (sz(u)−1)!(sz(u) - 1)!,恰好可以与它的父节点展开时产生的阶乘分母 sz(u)!sz(u)! 进行约分,最终抵消后只在分母上留下一个 sz(u)sz(u)。
    • 唯一没有被完全约分的分子,只有最顶层根节点 RR 展开时产生的 (sz(R)−1)!(sz(R) - 1)!,即 (n−1)!(n - 1)!。

    经过全局约分后,公式坍缩为极简的形态:分子固定为 (n−1)!(n - 1)!,分母则是除去根节点外,所有其他节点子树大小的乘积。

    汇聚阶段的方案数 Win(R)W_{in}(R):

    汇聚阶段的依赖关系(子节点必须在父节点之前)恰好与分发阶段(父节点必须在子节点之前)完全相反。根据对称性,其拓扑排序的方案数与分发阶段完全相同:

    $$W_{in}(R) = W_{out}(R) = \frac{(n-1)!}{\prod_{v \neq R} sz_R(v)}$$

    因为汇聚阶段和分发阶段是严格前后分离的,所以对于固定的中心节点 RR,传递的方案数为:

    $$W(R) = W_{in}(R) \times W_{out}(R) = \left( \frac{(n-1)!}{\prod_{v \neq R} sz_R(v)} \right)^2$$

    由于对于任意一种合法的传递序列,其最后一步的“汇聚”目标是唯一确定的,因此不同集散中心 RR 对应的方案集合互不重合。总方案数就是所有节点作为中心时的方案数之和:

    $$ans = \sum_{R=1}^n \left( \frac{(n-1)!}{\prod_{v \neq R} sz_R(v)} \right)^2 \pmod{10^9+7}$$

    暴力只需要枚举所有点为根计算答案即可。但容易观察到,这个答案只跟 szsz 有关,计算一次之后换根DP即可。

    • 1

    信息

    ID
    2783
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    (无)
    递交数
    50
    已通过
    10
    上传者