做题记录 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=\frac12\left(\min_{v\in N(u)}dp_v+\max_{v\in N(v)}dp_v\right) \]

发现难以计算,考虑化简

若某个 \(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\),若有多个则任意选择一个,不影响答案)

因此转移方程为

\[dp_u=\frac 12(dp_{fa_u}+dp_{lt_u}) \]

\(u\)\(lt_u\) 记为关键边,则关键链一定从某个开始一直向下延伸到一个叶子

上式转化为

\[dp_u-dp_{lt_u}=dp_{fa_u}-dp_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\) 对应边权,转移为

\[dp_{w,i}\gets dp_{v,i}+sz_ul \]

\(v\) 中不选同理

\(u\)\(v\) 中都选,则没有跨越 \(w\) 的匹配,转移为

\[dp_{w,i+j}\gets dp_{u,i}+dp_{v,j} \]

时间复杂度可做到 \(O(n^2)\)

代码

参考

posted @ 2025-03-13 19:33  Hstry  阅读(4)  评论(0)    收藏  举报