做题记录 25.3.13
\(\textcolor{blue}\odot\) CF2028E Alice's Adventures in the Rabbit Hole
用 \(\operatorname A\) 方表示要到根的一方,\(\operatorname B\) 表示要到叶子的一方
令 \(dp_u\) 表示节点 \(u\) 的答案,则 \(dp_1=1\),\(dp_{leaf}=0\),令 \(N(u)\) 表示 \(u\) 的邻居集合,转移为
发现难以计算,考虑化简
若某个 \(dp_u>dp_{fa_u}\),则走到 \(fa_u\) 时会选择向下,但是要到达根必须再次经过 \(fa_u\),因此 \(dp_u\) 必须存在一个儿子的 \(dp\) 值大于 \(dp_{fa_u}\),否则 \(dp_u\) 一定不大于 \(dp_{fa_u}\),而若这种情况发生,对该儿子也同理,一直向下推,会得出叶子的 \(dp\) 大于根的 \(dp\),显然矛盾
因此 \(dp_u\le dp_{fa_u}\),从而 \(\min_{v\in N(u)}dp_v=dp_{fa_u}\),\(\max_{v\in N(v)}dp_v=\max_{v\in son(v)}dp_v\)
即 \(\operatorname{A}\) 方的决策一定是向父亲移动,\(\operatorname{B}\) 方的决策一定是向某个儿子移动
等价于 \(\operatorname{A}\) 方每次令深度减一,\(\operatorname{B}\) 方每次令深度加一,深度减为 \(0\) 时 \(\operatorname{A}\) 方胜,到达一个儿子时 \(\operatorname{B}\) 方胜
显然 \(\operatorname{B}\) 方选择走向最近的一个叶子最优,记为 \(lt(u)\)(若不存在则为 \(0\),特别地 \(lt(1)=0\),若有多个则任意选择一个,不影响答案)
因此转移方程为
将 \(u\) 到 \(lt_u\) 记为关键边,则关键链一定从某个开始一直向下延伸到一个叶子
上式转化为
根据该等式,关键链顶的父亲到关键链底,这一条链上的 \(dp\) 值为等差数列
\(\operatorname{dfs}\),对于链顶为 \(1\) 的儿子的链可以直接推出链上所有点的 \(dp\),然后又可以得出链顶的父亲为这些点的链的 \(dp\) 值,递归可求出所有点的值
时间复杂度 \(O(n)\)
\(\textcolor{purple}\odot\) CF2026F Bermart Ice Cream
将操作建成树后,转化为维护一个物品的队列,\(O(q)\) 次队首 / 尾 压入 / 弹出物品,\(O(q)\) 次查询队列中物品做 \(0/1\) 背包的结果
双栈模拟队列,则在桶时间复杂度下把队列改成栈
栈中每个元素维护一个长为 \(p\) 的数组,表示栈底到该位置的所有元素做 \(0/1\) 背包的结果
时空复杂度 \(O(pq)\)
\(\textcolor{blue}\odot\) CF2026E Best Subsequence
\(n-\operatorname{popcount}(\operatorname{or}_{i=1}^n a_i)=n+\operatorname{popcount}(\operatorname{and}_{i=1}^n \overline{a_i})-\omega\)(其中 \(\operatorname{or},\operatorname{and},\overline{a}\) 表示按位或,按位与,按位取反,\(\omega=60\) 表示二进制位数量,\(\overline{a}\) 保留低 \(\omega\) 位),因此转化为最大化 \(n+\operatorname{popcount}(\operatorname{and}_{i=1}^n \overline{a_i})\)
对于 \(n\) 个数分别建立一个点,\(\omega\) 个位分别建立一个点
若 \(a_i\) 的第 \(j\) 位为 \(1\),则不能同时选择左侧第 \(i\) 点和右侧第 \(j\) 点,两者间连边
则 \(n+\operatorname{popcount}(\operatorname{and}_{i=1}^n \overline{a_i})\) 的最大值为图的最大独立集
设最大匹配为 \(m\),则答案为 \(n+\omega-m-\omega=n-m\)
若使用网络流,则时间复杂度为 \(O(\sum n\omega\sqrt{n+\omega})\),若使用匈牙利算法,则时间复杂度为 \(O(\sum(n+\omega)n\omega)\)
\(\textcolor{blue}\odot\) CF2025F Choose Your Queries
当操作变量(即 \(q\) 次操作的 \(x/y\))确定时,最优操作方式为被操作变量为 \(1\) 时选择 \(-1\),被操作变量为 \(0\) 时选择 \(+1\),这样每个值都是 \(0/1\),保证了非负
于是转化为给定 \(q\) 组点,每组当中选择一个,最小化 \(n\) 个点中被选择奇数次的点的数量
建立 \(n\) 个点的图,对于下标 \((x,y)\),\(x\) 和 \(y\) 之间连无向边
给每条边定向,\(x\to y\) 表示选择 \(y\),\(x\gets y\) 表示选择 \(x\),转化为最小化入度为奇数的点的数量
对图 \(\operatorname{dfs}\),非树边任意,树边从下到上把除根外的点的入度配为偶数,这样至多只有根的入度可能为奇数
显然该方法一定最优
注意图可能不连通,需要对每个连通块做一次定向
时间复杂度 \(O(n)\)
\(\textcolor{blue}\odot\) CF2023C C+K+S
若第一张图中出点数量不等于第二张图中入点数量,显然不合法
若一张图中全为出边或入边,则不会新增环,因此一定合法
图中任意一个环长为 \(k\) 的倍数,等价于任意两点之间所有路径长度模 \(k\) 意义下相同,等价于任意点到 \(1\) 的路径长度模 \(k\) 意义下固定
对图 \(k\) 染色(赋权 \(w_u\in[0,k)\),若 \(u\to v\) 则 \(w_v\equiv w_u+1\pmod k\)),设图一染色结果为 \(ca\),图二为 \(cb\)
两张图之间可能有一个偏移量,先假设偏移量为 \(0\),判断是否可行
对于图一中 \(a_i=1\) 的点,需要找到图二中 \(cb_j=ca_i+1\) 且 \(b_j=0\) 的与之匹配
对于图二中 \(a_i=0\) 的,需要找 \(cb_j=ca_i-1\) 且 \(b_j=1\) 的
令所有 \(b_j=0\) 的点 \(cb_j\) 减一,所有 \(b_j=1\) 的点 \(cb_j\) 加一,则转化为图一中每个点要找到权值相同且颜色相异的点
令 \(ai_x\) 为 \(a_i=1\) 且 \(ca_i=x\) 的数量,\(ao_x\) 为 \(a_i=0\) 且 \(ca_i=x\) 的数量,\(bi_x\) 为 \(b_i=1\) 且 \(cb_i=x\) 的数量,\(bo_x\) 为 \(b_i=0\) 且 \(cb_i=x\) 的数量
则上述条件等价于 \(ai=bo\) 且 \(ao=bi\)
再考虑偏移量,假设偏移作用到图二上,相当于 \(bi\) 和 \(bo\) 同步循环位移若干位后和 \(ai\),\(ao\) 相同
判定可用 \(\operatorname{KMP}\) 实现
时间复杂度 \(O(\sum (n+m))\)
\(\textcolor{blue}\odot\) CF2022E2 Billetes MX (Hard Version)
令 \(\mathbb V=[0,2^{30})\),以下前缀和、差分都是在按位异或意义下的
令 \(s_{i,j}=a_{i,j}\oplus a_{i-1,j}\oplus a_{i,j-1}\oplus a_{i-1,j-1}\;(1\le i\le n,1\le j\le m)\)(假定 \(a_{0,\ast}=a_{\ast,0}=0\))
则 \(s\) 为 \(a\) 的二维差分,\(a\) 为 \(s\) 的二维前缀和
显然满足 \(a_{i,j}\in \mathbb V\) 的 \(a\) 和满足 \(s_{i,j}\in\mathbb V\) 的 \(b\) 构成双射
\(a\) 满足 \(\forall 1\le p<q\le n,1\le u,v\le m\),\(a_{p,u}\oplus a_{p,v}\oplus a_{q,u}\oplus a_{q,v}=0\)
而 \(a_{p,u}\oplus a_{p,v}\oplus a_{q,u}\oplus a_{q,v}=\bigoplus_{p<i\le q,u<j\le v}s_{i,j}\)
该限制等价于 \(s_{i,j}=0\;(1<i\le n,1<j\le m)\)
令 \(t_{1\sim n}=s_{1\sim n,1}\),\(t_{n+1\sim n+m-1}=s_{1,2\sim m}\)
则 \(a_{x,y}=\bigoplus_{1\le i\le x,1\le j\le y}s_{i,j}=\bigoplus_{n-x+1\le i\le n+y-1}t_i\)
问题转化为有一个长为 \(n+m-1\) 的序列 \(t\),初始有若干限制,每次加入一个限制,求出满足目前为止所有限制的序列数量,每个限制形如 \(t\) 的区间 \(\oplus\) 和为给定值
令 \(T\) 为 \(t\) 的前缀和,则 \(T_0=0\),每条 \(t\) 的 \([l,r]\) 区间异或和为 \(v\) 的限制转化为 \(T_r\oplus T_{l-1}=v\)
转化为 \(n+m\) 个数,其中一个恒定为 \(0\),另外数字在 \(\mathbb V\) 中,每次告诉两个数字相异或的结果,求出方案数
使用边带权并查集维护连通块,若出现矛盾则当前及之后的方案数都是 \(0\),否则方案数为 \(|\mathbb V|^{s-1}\),其中 \(s\) 为连通块数量(因为 \(0\) 所在连通块内数字固定)
时间复杂度 \(O(\sum m\alpha (n))\)
\(\textcolor{purple}\odot\) CF2022D2 Asesino (Hard Version)
可 证明 询问次数一定可以卡到 \(n\) 次,尝试如何取到该上界
注意若 \(\operatorname{qry}(u,v)\ne \operatorname{qry}(v,u)\),则冒名顶替者一定在 \(\{u,v\}\) 中
因此若 \(2\mid n\),则将其两两配对,先用 \(\frac{n-2}2\times 2\) 次询问确定所在的对,然后再用两次询问得到具体位置,总询问次数 \(\le n\)(由于交互库自适应,其一定会卡满,下同)
若 \(2\nmid n\),考虑先用 \(3\) 次询问判定是否在 \(\{n-2,n-1,n\}\) 中,若不在则套用偶数的方案总操作次数 \(\le n\),若在其中则使用一些方法求出具体位置
若 \(\operatorname{qry}(n-2,n-1)+\operatorname{qry}(n-1,n)+\operatorname{qry}(n,n-2)\) 为偶数,则在这三个位置中,分讨可证
此时可以再询问 \((n-1,n-2)\) 和 \((n,n-1)\),从而得到具体位置
当 \(n\ge 5\) 时这样可以做到不超过 \(n\) 次
当 \(n=3\) 时查询是否在 \(\{1,3\}\) 中,是否在 \(\{1,2\}\) 中得到答案,共 \(4\) 次查询
\(\textcolor{blue}\odot\) CF2021E2 Digital Village (Hard Version)
考虑 \(\operatorname{Kruskal}\) 重构树上 \(dp\)
令 \(dp_{u,i}\) 表示重构树上结点 \(u\) 所在子树内选择 \(i\) 个服务器的最小代价
则对于叶子 \(u\),\(dp_{u,i}=0\)
合并两个连通块时,设两者分别为 \(u,v\),合并到 \(w\)
若 \(u\) 中不选服务器,则都要移到 \(v\) 所在连通块内,令 \(sz_u\) 为结点 \(u\) 所在子树内关键点数量,令 \(l\) 为 \(w\) 对应边权,转移为
\(v\) 中不选同理
若 \(u\) 和 \(v\) 中都选,则没有跨越 \(w\) 的匹配,转移为
时间复杂度可做到 \(O(n^2)\)

浙公网安备 33010602011771号