2026.7.22 模拟赛

http://183.6.8.202:8888/d/contest/contest/6a603a8f6db0e02618c779ea

T1 T2 T3 T4
实际得分 80 60 56 0
期望得分 80 100 100 0
能力得分 100 100 100 20

这场 T1 拼了 80 分,T2,T3 均想到正解,但是 T2 因为及其唐氏的错误挂掉(竟然大样例没有测出来),T3 写的分块遭到卡常(开 O2 就过了),T4 没有时间写特殊性质.

T1,T4 均是神秘构造,T2 是基环树,T3 是套着博弈论外衣的数据结构(不知道能不能算).

爆破

这道题 80 分不难想到:
对于每个 #,使用四个正方形拼出:使得刚好 # 减去次数比其他方格均多 1.

100 分只需要再改进一下:将一行连续的 # 看为一个整体,不难发现这样量级大约是 \(2n^2\).

事实上,这样交到 UOJ 上会被卡,原因是可以卡到 \(2n^2+2n\),这时候就要对 . 操作,将 . 减去的次数比其他方格均少 1.

分组

基环树上加权最大边独立集.

Lewisak:基环树就是一坨坨小屎堆成的大粪.

Lewisak:一道屎题的诞生:
出题人想到一个经典的树形 DP,将它搬到基环树上,
又觉得不够屎,加上了输出方案,
又觉得不够屎,改成了带权形式,
又觉得不够屎,将基环树改成了基环树森林与普通森林的混合体.

双子之争

结论是不难猜到的,就是需要维护区间的大于/小于某个数的最靠前的前缀.

可以使用一个前缀和,将单点修改转化成区间修改,将区间前缀查询,改为区间查询.

使用分块/线段树维护,(场上比较唐,将块内元素还进行排序,其实只需要维护最大值/最小值,把分块的维护方式搬到线段树上就是对的).

并查集

对于一个路径压缩并查集,求出一种操作方式,使其变为另外一种.

这道题数据范围是给到 \(O(n^2)\) 的,因此实现可以不是很精细.

考虑有效的操作,其实只有两种:

  1. 对于两个根节点进行 merge
  2. 对于孙子节点进行 find,使其变为儿子节点.

所有的操作均可以分解成这两种操作.

考虑倒序做这个操作:

  1. 将父亲与儿子断开;
  2. 将儿子节点变成孙子节点.

对于 \(b\) 数组,将儿子分成两类:

  1. \(a\) 中的儿子;
  2. \(a\) 中的根节点;
  3. 其他节点.

对于第 3 类节点,我们需要将它们变成对应儿子的孙子节点.
对于第 2 类节点,在其他儿子的子树中有其在 \(a\) 中的儿子,则将其变成对应儿子的孙子.
否则分裂第 2 类节点.

如何判断构造出的方案是否合法?只需要按照方案模拟一遍,检查即可.

posted @ 2026-07-23 09:13  zhoumengxuan  阅读(8)  评论(0)    收藏  举报