码迷,mamicode.com
首页 > 其他好文 > 详细

康复训练

时间:2019-06-29 14:38:58      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:com   相同   训练   ali   深度   bfs   数组   $2   答案   

6 月 29 日

Comet OJ #6 D

Comet OJ #6 D

题意:给定一棵 $n(n \le 100000)$ 个点的树。在至少两个点上放棋子,每一个回合将所有棋子移向父亲,存在棋子重合时结束。问所有的 $2 ^ n - n - 1$ 个初始棋局的回合数的和,对 $998244353$ 取模。

分析:求出 BFS 序,进行 $T$ 个回合之后,转移到的点相同 的 位置必然被划分到连续一段。

$$\begin{aligned} \sum_{S} \text{S 能进行的回合数} & = \sum_S \sum_{T \ge 0} [\text{S 能进行超过 T 个回合}] \\ & = \sum_{T \ge 0} \sum_S [\text{S 能进行超过 T 个回合}] \end{aligned}$$

用并查集维护 BFS 序并统计答案。剩下的问题就是判断 BFS 序的每个位置在什么时候与下一段合并:找当前这个点与深度相同的下一个点的 LCA (也就是 BFS 序的下一个),将 dep 相减即可判断合并的回合。

思考一

细化理解一下对所求量的转化,也就是阿贝尔求和公式。

我可以改编这样一个问题:给定一棵 $n(n \le 100000)$ 个点的树。在至少两个点上放棋子,每一个回合将所有棋子移向父亲,存在棋子重合时结束,设共进行了 $T$ 个回合,贡献 $a[T]$ 。问所有的 $2 ^ n - n - 1$ 个初始棋局的回合数的贡献之和,对 $998244353$ 取模。

$$\begin{aligned} \sum_{S} a[\text{S 能进行的回合数}] & = \sum_S \sum_{T \ge 0} [\text{S 能进行超过 T 个回合}] (a[T+1] - a[T]) \\ & = \sum_{T \ge 0} (a[T + 1] - a[T]) \sum_S [\text{S 能进行超过 T 个回合}] \end{aligned}$$

思考二

给定一棵 $n(n \le 100000)$ 个点的树。在至少两个点上放棋子,每一个回合将所有棋子移向父亲,存在棋子重合时结束。多组询问,每次给定 $k$ ,问选择 $k$ 个棋子至多能进行多少回合。

把 $T$ 个回合的段数求出来,对这个数组进行二分。

康复训练

标签:com   相同   训练   ali   深度   bfs   数组   $2   答案   

原文地址:https://www.cnblogs.com/Sdchr/p/11106344.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!