1 条题解
-
1
一共有 个人,通信网络构成一棵 个节点、 条边的树。要让所有人都获得所有消息,在树上任何一条边 上,信息至少需要从 传递一次,且从 传递一次。 因此,最小的传递总次数(即最小轮数)必定为 。在这个最小轮数下,每条边恰好在两个方向各传递一次。
我们可以把整个传递过程看作一个“汇聚”再“分发”的过程。必然存在某一个节点 作为信息的“集散中心”:
- 汇聚阶段:所有节点将信息向节点 传递。此时树上的边全部指向 。
- 分发阶段:节点 收集齐所有信息后,再将完整的信息向外分发给所有节点。此时树上的边全部背离 。
在操作序列中,所有指向 的边必定在所有背离 的边之前完成传递。
- 对于指向 的边:一个节点必须先收到所有子节点的信息,才能将信息传递给它的父节点。这相当于对“指向 的有向树”的边进行拓扑排序。
- 对于背离 的边:一个节点必须先收到父节点传来的完整信息,才能将信息继续向下传递。这相当于对“背离 的有向树”的边进行拓扑排序。
假设我们枚举节点 作为信息的集散中心。
当树以 为根时,设 表示以 为根的子树的大小(节点个数)。
分发阶段的方案数 :
这相当于求一棵有向树(边由根向外)的拓扑排序方案数。对于一棵有向外向树,其节点拓扑排序的经典公式为:
$$W_{out}(R) = \frac{(n-1)!}{\prod_{v \neq R} sz_R(v)}$$对于这个组合数的说明:
假设树中一共有 个节点,如果我们不考虑任何父子拓扑约束,这 个节点的任意排列方案总数是 。
现在我们加入树结构的约束条件:对于树上的任意一个节点 ,节点 必须排在它所属子树(大小为 )内所有节点的最前面。
在 种全排列中,考察节点 及其子树内的所有节点(共 个)。在这 个节点的相对顺序中,节点 恰好排在第 1 位的概率显然是:
由于树结构的特殊性质(每棵子树的约束是嵌套或互相独立的),对于树上所有节点 ,满足“ 在其子树中排第一”这一条件的概率是相互独立的。因此,一个随机排列能同时满足所有父子节点拓扑关系的概率为:
用总排列数乘以合法概率,即可得到合法的拓扑排序总方案数:
$$W = n! \times \prod_{u \in V} \frac{1}{sz(u)} = \frac{n!}{\prod_{u \in V} sz(u)}$$由于根节点 的子树大小 ,我们可以将根节点的项单独提取出来与分子约分:
$$W = \frac{n!}{n \times \prod_{v \neq R} sz(v)} = \frac{(n-1)!}{\prod_{v \neq R} sz(v)}$$另一个视角:
我们可以利用分治与动态规划的思想,从底向上合并子树的排列方案。
假设当前节点为 ,它的子节点分别为 。
已知每个子节点 所在的子树的内部拓扑排序方案数为 ,且该子树的大小为 。
当我们处理节点 的子树时:
- 节点 必须固定放在序列的第一个位置。
- 剩下的 个位置,需要分配给 棵相互独立的子树。
- 把 个元素划分为 个集合(大小分别为 ),这就相当于一个多重集的排列问题,分配位置的方案数为:$\frac{(sz(u) - 1)!}{sz(v_1)! \times sz(v_2)! \times \dots \times sz(v_k)!}$
除了位置的分配,每棵子树内部还有各自的合法排序方案,因此根据乘法原理,以 为根的子树总方案数 为:
$$W(u) = \left( \prod_{i=1}^k W(v_i) \right) \times \frac{(sz(u) - 1)!}{\prod_{i=1}^k sz(v_i)!}$$如果我们将这个递推式从根节点 开始一层层向下展开,所有的 会继续向下拆解。在完全展开后你会发现:
- 每一层展开产生的阶乘分子 ,恰好可以与它的父节点展开时产生的阶乘分母 进行约分,最终抵消后只在分母上留下一个 。
- 唯一没有被完全约分的分子,只有最顶层根节点 展开时产生的 ,即 。
经过全局约分后,公式坍缩为极简的形态:分子固定为 ,分母则是除去根节点外,所有其他节点子树大小的乘积。
汇聚阶段的方案数 :
汇聚阶段的依赖关系(子节点必须在父节点之前)恰好与分发阶段(父节点必须在子节点之前)完全相反。根据对称性,其拓扑排序的方案数与分发阶段完全相同:
$$W_{in}(R) = W_{out}(R) = \frac{(n-1)!}{\prod_{v \neq R} sz_R(v)}$$因为汇聚阶段和分发阶段是严格前后分离的,所以对于固定的中心节点 ,传递的方案数为:
$$W(R) = W_{in}(R) \times W_{out}(R) = \left( \frac{(n-1)!}{\prod_{v \neq R} sz_R(v)} \right)^2$$由于对于任意一种合法的传递序列,其最后一步的“汇聚”目标是唯一确定的,因此不同集散中心 对应的方案集合互不重合。总方案数就是所有节点作为中心时的方案数之和:
$$ans = \sum_{R=1}^n \left( \frac{(n-1)!}{\prod_{v \neq R} sz_R(v)} \right)^2 \pmod{10^9+7}$$暴力只需要枚举所有点为根计算答案即可。但容易观察到,这个答案只跟 有关,计算一次之后换根DP即可。
信息
- ID
- 2783
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 50
- 已通过
- 10
- 上传者