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\) 出发向儿子走的最长链
  • 然后分不同的情况讨论:
    1. 路径的起止点分别在 \(u\) 不同的子树中,对答案的贡献为为 \(\sum \limits _{v1, v2 \in son(u)} {(f_{v1} · g_{v2} + f_{v2} · g_{v1}) \times 2}\),最后 \(\times 2\) 是因为 \(u\) 可以包含或不包含在点集中。
    1. 点集包含且只包含包含 \(u\) 的某一棵子树至少一个点和 \(u\),贡献为 \(\sum \limits _{v \in son(u)}{f_v + dis_u · g_v}\)\(dis_u\) 要求不经过 \(v\),所以我们需要处理出从 \(u\) 出发的最长链、次长链以及从 \(fa_u\)\(u\) 的最长链。
    1. 只包含 \(u\) 的点集,显然为 \(2\) 所说三条链中的最大的两条之和。

可以发现这样子既不会算漏也不会算重。

处理 \(f_u, \ g_u\) 的过程中已经求好了权值和与方案数,最后求逆元输出即可。

T2. 6888 变换 (transform)

可以发现一个性质:当有两个及以上的连续点颜色相同时,把这些连续点当成一块,块内点颜色不会改变,且每次变换块会向外扩展一个点,知道与其他快相邻。

通过以上性质可以得出答案为两块间距离除以二上取整的最大值。

很容易想到线段树维护,每个区间维护最左边的块和最右边的块,合并时判断中间是否能合成一块(注意可能将最左右的块合并),简单分类讨论即可,并且同时维护块距离的最大值。

询问答案时注意是一个环,同样简单分类讨论可以得出。

\(T3\)

不会,也看不懂,\(dp\)\(dp\) 直接劝退,

T4. 6890 打字机

首先我们有:1. 若当前栈顶字符匹配,那么直接输出;2. 若栈顶的下一个字符匹配,那么可以证明退栈比压栈优

所以可以得出栈内一个字符与其左右两单位内字符都不相同,也就是说栈的形态一定形如 \(XYZXYZXYZ......\),那么便可以设 \(dp\) 记录匹配到的位置以及栈的状态,转移时注意不要漏转移方式(注意栈内只有一个字符时也可以转换形态)。

时间复杂度 \(O(|S|^2)\)

posted @ 2020-11-24 21:36  buzzhou  阅读(50)  评论(0)    收藏  举报