2020.11.24提高组模拟
2020.11.24【NOIP提高A组】模拟
今天分数和昨天差不多,言下之意呢,想必懂得都懂,没错我再次爆零了,(doge)
早上有点困唔,晚上还是要早点睡。\(T1\) 想了很久始终觉得是到神仙题,然后发现 \(T2\) 是到水题,码完 \(T2\) 肥来看 \(T1\),才发现开头有一句:

\(oier\) 那么多年了我才发现 无向无环图是一个森林 ,人没了人没了,再想一想不就是树形 \(dp\) 吗,\(1h\) 风风火火打出来没调出来,最后 \(T2\) 线段树细节爆炸光荣爆零。
T1. 6887 路径 (path)
无向无环图是一个森林 !无向无环图是一个森林 !!无向无环图是一个森林 !!!
强烈吐槽出题人不加粗不说明,甚至连 \(m\) 的范围都没给,差评!
经历了血的教训后我们终于知道了这个性质,知道后应该比较容易想到树形 \(dp\) ,问题在于怎么统计答案。
考虑枚举一个点 \(u\),统计部分路径与 \(u\) 有关的点集的最大边权和:
- 首先设 \(f_u\) 表示以 \(u\) 为根的子树中简单路径的一端为 \(u\),且路劲权值最大的不同点集的权值之和,为了转移及计算期望再设 \(g_u\) 为方案数。
- \(f_u, \ g_u\) 的处理应该不难,\(f_u = 2\sum \limits _{v \in son(u)}{(f_v + w(u, v) · g_v)} + dis_u\),\(g_u = 2\sum \limits _{v \in son(u)} {g_v} + 1\),
- 其中 \(dis_u\) 表示从 \(u\) 出发向儿子走的最长链
- 然后分不同的情况讨论:
-
- 路径的起止点分别在 \(u\) 不同的子树中,对答案的贡献为为 \(\sum \limits _{v1, v2 \in son(u)} {(f_{v1} · g_{v2} + f_{v2} · g_{v1}) \times 2}\),最后 \(\times 2\) 是因为 \(u\) 可以包含或不包含在点集中。
-
- 点集包含且只包含包含 \(u\) 的某一棵子树至少一个点和 \(u\),贡献为 \(\sum \limits _{v \in son(u)}{f_v + dis_u · g_v}\),\(dis_u\) 要求不经过 \(v\),所以我们需要处理出从 \(u\) 出发的最长链、次长链以及从 \(fa_u\) 到 \(u\) 的最长链。
-
- 只包含 \(u\) 的点集,显然为 \(2\) 所说三条链中的最大的两条之和。
可以发现这样子既不会算漏也不会算重。
处理 \(f_u, \ g_u\) 的过程中已经求好了权值和与方案数,最后求逆元输出即可。
T2. 6888 变换 (transform)
可以发现一个性质:当有两个及以上的连续点颜色相同时,把这些连续点当成一块,块内点颜色不会改变,且每次变换块会向外扩展一个点,知道与其他快相邻。
通过以上性质可以得出答案为两块间距离除以二上取整的最大值。
很容易想到线段树维护,每个区间维护最左边的块和最右边的块,合并时判断中间是否能合成一块(注意可能将最左右的块合并),简单分类讨论即可,并且同时维护块距离的最大值。
询问答案时注意是一个环,同样简单分类讨论可以得出。
\(T3\)
不会,也看不懂,\(dp\) 套 \(dp\) 直接劝退,逃。
T4. 6890 打字机
首先我们有:1. 若当前栈顶字符匹配,那么直接输出;2. 若栈顶的下一个字符匹配,那么可以证明退栈比压栈优
所以可以得出栈内一个字符与其左右两单位内字符都不相同,也就是说栈的形态一定形如 \(XYZXYZXYZ......\),那么便可以设 \(dp\) 记录匹配到的位置以及栈的状态,转移时注意不要漏转移方式(注意栈内只有一个字符时也可以转换形态)。
时间复杂度 \(O(|S|^2)\)

浙公网安备 33010602011771号