我们知道一棵有根树可以进行深度优先遍历(DFS)以及广度优先遍历(BFS)来生成这棵树的 DFS 序以及 BFS 序。两棵不同的树的 DFS 序有可能相同,并且它们的 BFS 序也有可能相同。
现给定一个 DFS 序和 BFS 序,我们想要知道,符合条件的有根树中,树的高度的平均值。即,假如共有 棵不同的有根树具有这组 DFS 序和 BFS 序,且他们的高度分别是 ,那么请你输出:
Constraints
Solution
编号对结果没有影响,我们可以将 BFS 序改成 并对应地修改 DFS 序。
然后我们可以观察到一个结论:如果编号为 的节点在 DFS 序中位置大于 号点,则 与 一定分层。
因为在 DFS 序中,对于相邻的点对 , 的深度一定不大于 ,所以要限制在 BFS 序中分层的时候,区间 的分层数不能超过 。可以根据 BFS 序中的位置判断 是否是 的父亲,若是,则他们之间一定会强制分层,用差分来限制区间内的点对不可分层。
对于没有限制的点对 ,对答案的贡献为 。
Code
1 |
|