Live2D

Solution Set -「LOCAL」冲刺省选 Round XV

Summary

  读错题了读错题了 B 题差点没做出来真的太吓人了。

  逆序开题,C 题直接冲一发暴力最大权闭合子图居然过了。A 题确实一下子没想到用“可能的函数集合”描述状态,所以直接摆烂。B 题感觉是个没见过的 trick 啊,但现推还是比较容易,本来把“跳到一个后代”理解成“跳到一个儿子”,冲出树剖调半天发现读错题,我直接 😅。还好树剖那一大坨都是对的,只是初始的 SG 得重算(怎么还变简单了啊喂)。总之就是这里浪费了很多时间。

  想出正解的题一定缩减代码和调试时间,不要太悠闲 qwq。

Solution

A 开心消消乐

  给定任意 φ:{0,1}3{0,1} 以及一个字符集为 01? 的串 S。每次操作为:取出一个 S[:2k+1],将 S 的这个前缀替换为字符 φ(,φ(S2k1,S2k,S2k+1))。求有多少个将 ? 替换为 01 的方案,使得存在一种操作方案能将得到的 S 变为单个字符 1

  n105,多测组数 T10


  你先想想怎么判合法。 ——邓老师

  考虑检查一个字符集为 01S 是否合法。DP 的基本想法必然是以前缀为子问题,而当一个前缀处理完成后,我们只需要关心它留下的东西对后方操作的影响。形式地,令 g(i,ϕ) 表示考虑了前 i (2i) 个字符,剩下的前缀对下一个字符的影响是映射 ϕ 的情况是否存在。转移不难。

  会判合法,直接 DP of DP 解决问题:令 f(i,Φ) 表示考虑了前 i (2i) 个字符,剩下的前缀对下一个字符的影响是映射集合 Φ 内任意一种的方案数。在求 f 之前预处理关于 Φ 的转移,可以做到 O(n)(状态数有常数 222,转移常数最坏是 2×2)。

B 树上的棋局

  给定一棵含有 n 个结点的树,初始时根有 r=1,每个结点上有一枚棋子。Alice 和 Bob 在玩一个博弈,双方轮流取一个棋子,将其跳到它所在结点的子树内任意一点,不能不动。现进行 q 次操作:

  1. 给定 u,v,x,在路径 (u,v) 上的每个结点加一枚棋子,然后令 rx,最后回答当前树下博弈游戏的 SG 值;
  2. 给定 u,x,在 u(以 r 为根的)子树内的每个结点加一枚棋子,然后令 rx,最后回答当前树下博弈游戏的 SG 值。

  n,q2×105


  只要你不读错题…… 就算你读错了题……

  首先观察一下修改的形式,发现根的位置几乎不影响修改的进行。例如钦定 r=1,操作 1 不受影响;操作 2 可以由若干个对子树的覆盖异或而成。因此可以把为题描述为:在 r=1 的背景下做修改,询问 r=x 时的 SG 值,这样“换根”操作就几乎没有了。

  再考虑如何回答询问。令 g(u) 表示 r=1u 的 SG;f(u) 表示 r=uu 的 SG,这俩都能预处理出来。令 cu 表示 u 结点棋子数量奇偶性,可见 cug(u) 就是 r=1 的答案。对于 r=x,SG 值有变动的仅有路径 x1 上的结点:

  • 对于 x,它的 SG 由 g(x) 变为 f(x)
  • 对于其余 u,它有在路径上的孩子 v,它的 SG 变为 f(u)mex 集合里剔除 g(v)(把 v 子树砍掉)。

  树剖?类似于树上 DDP,我们令 h(u) 表示砍掉 u 的重儿子之后,以 u 为根,u 的 SG。树剖维护 cu(h(u)g(u)) 的值,在 cug(u) 的基础上修正 x1 这条链上的答案即可。O(nlog2n),常数踩标 😃

C 社会黄油飞

  (作亿点简化,但应该对于高水平的你来说问题不大。)给定一个 n 个点 m 条边的图,求非空最大权闭合子图(是否大于给定常数)。

  n2×103m6×103


  暴力:钦定选一个点,跑 n 次最大权闭合子图,O(nDinic(n+2,n+m)),过了。

  正解:钦定选一个点,然后退流撤销用于钦定的 + 边,O(¿),T 了。

  反 了 它 ¿

posted @   Rainybunny  阅读(147)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示