康复训练
Posted sdchr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了康复训练相关的知识,希望对你有一定的参考价值。
6 月 29 日
Comet OJ #6 D
Comet OJ #6 D
题意:给定一棵 $n(n \le 100000)$ 个点的树。在至少两个点上放棋子,每一个回合将所有棋子移向父亲,存在棋子重合时结束。问所有的 $2 ^ n - n - 1$ 个初始棋局的回合数的和,对 $998244353$ 取模。
分析:求出 BFS 序,进行 $T$ 个回合之后,转移到的点相同 的 位置必然被划分到连续一段。
$$\beginaligned \sum_S \textS 能进行的回合数 & = \sum_S \sum_T \ge 0 [\textS 能进行超过 T 个回合] \\ & = \sum_T \ge 0 \sum_S [\textS 能进行超过 T 个回合] \endaligned$$
用并查集维护 BFS 序并统计答案。剩下的问题就是判断 BFS 序的每个位置在什么时候与下一段合并:找当前这个点与深度相同的下一个点的 LCA (也就是 BFS 序的下一个),将 dep 相减即可判断合并的回合。
思考一
细化理解一下对所求量的转化,也就是阿贝尔求和公式。
我可以改编这样一个问题:给定一棵 $n(n \le 100000)$ 个点的树。在至少两个点上放棋子,每一个回合将所有棋子移向父亲,存在棋子重合时结束,设共进行了 $T$ 个回合,贡献 $a[T]$ 。问所有的 $2 ^ n - n - 1$ 个初始棋局的回合数的贡献之和,对 $998244353$ 取模。
$$\beginaligned \sum_S a[\textS 能进行的回合数] & = \sum_S \sum_T \ge 0 [\textS 能进行超过 T 个回合] (a[T+1] - a[T]) \\ & = \sum_T \ge 0 (a[T + 1] - a[T]) \sum_S [\textS 能进行超过 T 个回合] \endaligned$$
思考二
给定一棵 $n(n \le 100000)$ 个点的树。在至少两个点上放棋子,每一个回合将所有棋子移向父亲,存在棋子重合时结束。多组询问,每次给定 $k$ ,问选择 $k$ 个棋子至多能进行多少回合。
把 $T$ 个回合的段数求出来,对这个数组进行二分。
以上是关于康复训练的主要内容,如果未能解决你的问题,请参考以下文章
2021年暑假康复性训练(Codeforces Round #731 (Div. 3))全题解