2026三轮省集
2026三轮省集
D1T3
题面:
给定一张有向图,边带权 \(w_{x,y}\),每次可以将一个点的出边边权全部加一,或将一个点的所有入边全部减一,要求最终每个边的边权在区间 \([l_{x,y},r_{x,y}]\) 之间,求最大边权和,并输出方案。\(n\leq 100\)
题解:
明显的线性规划,写成标准形式就是:
对偶问题变成:
观察两个限制,把两边都加起来是一样的,说明所有限制都取等号,没有不等号,那么对两个限制建点 \(x,x'\),连边 \((x',y,inf,r_{x,y}),(y,x',inf,-l_{x,y})(x,T,out_x,0)(S,x',in_x,0)\),容易验证满流的时候就是符合所有限制的,跑最小费用最大流即可。
根据互补松弛定理,此时用原始对偶算法跑费用流,满足 \(w(u,v)+h_u-h_v\geq 0\) 其中 \(h\) 是势能,可以化简得到 \(l_{x,y}\leq w_{x,y}+h_{y}-h_{x'}\leq r_{x,y}\),所以取 \(a_x=-h_{x'},b_x=-h_{x}\) 就能满足条件,把所有 \(a_x,b_x\) 同时加一个数不改变合法性,所以输出每个点势能减去势能最小值即可。
D3T3
题面:
给定一个长为 \(n\) 的操作序列,操作为 与,或,异或 上一个数 \(x\),以及把当前数加一,给定 \(Q\) 次询问,每次给出 \(v,l,r,t\) 问对 \(v\) 依次执行 \([l,r]\) 的操作后二进制下第 \(t\) 位的值,强制在线。
题解:
首先考虑没有加法 与,或 操作的影响是容易消除的,因为他们相当于给一位赋值,记录 \(i\) 之前第一个对第 \(j\) 位赋值的操作,每次问 \([l,r]\) 区间第 \(j\) 位的值,只需要查找 \([\max(l,pre_{r,j}),r]\) 这个区间的异或和即可。所以相当于一个只有异或和加法的题,每次查询的时候都判断一下会不会赋值就行了。
设 \(f_{i,j}\) 表示假设操作完 \(i\) 之后最低位 \(1\) 之前有至少 \(j\) 个零,下一次满足至少有 \(j\) 个零的位置。\(g_{i,j}\) 表示操作完 \(i\) 之后有恰好 \(j\) 个零,下一次满足至少 \(j+1\) 个零的位置。
这两个数组可以 \(j\) 从小到大枚举,\(i\) 从大到小枚举求出。具体的考虑 \(j-1\) 位经过 \([i+1,f_{i,j-1}]\) 之后的结果,如果是 \(0\) 则 \(f_{i,j}=f_{i,j-1}\) 否则 \(f_{i,j}=g_{f_{i,j-1},j-1}\)。考虑第 \(j\) 位经过 \([i+1,f_{i,j}]\) 之后的结果,如果是 \(0\) 则 \(g_{i,j}=f_{i,j}\) 否则 \(g_{i,j}=g_{f_{i,j},j}\)。
给出询问 \(v,l,r,t\) ,若 \(v\) 末尾恰好有 \(p\) 个 \(0\) 且 \(p<t\),则尝试将 \(l\) 移动到 \(g_{l,p}\) 处增加 \(0\) 的个数。如果 \(g_{l,p}>r+1\) 意味着整个过程中未尾 \(0\) 的个数不足以用 \(+1\) 操作影响第 \(L\) 位,此时就等于没有加一操作,容易获得最终结果。
如果某个时刻 \(p\geq t\) 了,不妨假设此时左端点移动到了 \(l'\) ,则先查询 \(v\) 的第 \(t\) 位在 \([l,l'-1]\) 区间的结果,再从 \(l'\) 开始查询。注意到不断让 \(l'\) 变成 \(f_{l',t}\) 就可以遍历低 \(t\) 位为 \(0\) 的状态,直到跳出 \(r\) 之前的最后一个,然后把最后一段计算进去。
暴力跳复杂度是不对的,但是 \(f\) 数组构成了一颗树,可以在上面树剖等方式维护 \(k\) 级祖先做到 \(\log\) 复杂度跳到最后一个,每条父边维护信息是简单的。
D5T3
题面:
\(n\) 个人,每个人衣服颜色 \(a_i\),每人依次进入场馆,要求每次相邻进入场馆的两人衣服颜色不同,每次找到第一个合法的人入场。\(Q\) 次操作每次交换 \(a_x,a_{x+1}\),或查询第 \(y\) 个人什么时候入场。 \(n,Q\leq 500000\)
题解:
考虑对于每个 \(i\) 求出,把所有 \(i\) 的颜色当成 \(+1\),其它颜色当成 \(-1\) 第一次 \(0\) 出现的位置 \(nxt_i\),则从 \(1\) 开始一直跳 \(nxt_i\) 到不超过 \(y\) 的最后一个人 \(x\) 处,之前的所有人全部入场,\(x\) 之后一直到 \(y\) 之前 \(a_x\) 的颜色一定用不完,一定是 \(a_x\) 一个其它颜色一个,容易维护区间有几个某颜色的值得到答案。
考虑怎么维护 \(nxt_i\),交换 \(x,x+1\) 时只有指向 \(x,x+1\) 和 \(x,x+1\) 所指向的这 \(4\) 条边会发生改变,对于每个颜色开线段树维护当前颜色的位置,并通过线段树二分容易确定 \(nxt_i\) 的值。
然后问题是怎么找到最终 \(nxt_i\) 跳到的值,这是 LCT 板子题,可以用分块维护跳出当前块的第一个位置,根号复杂度通过此题。
D6T3
题面:
给出两个有 \(n\) 段和 \(m\) 段的压缩序列,每段是若干个一样的数,值域是 \(k\)。两人博弈,初始一个空序列 \(c\),轮流加入一个数使得 \(c\) 始终对于两个压缩序列都是它们的子序列,不能操作的失败。\(Q\) 次询问每次给出 \(x_i,y_i\) 表示从两个序列的第 \(x_i+1,y_i+1\) 个开始博弈谁能获胜。 \(n,m,k\leq 1600,q\leq 10^6\)
题解:
考虑一个平面,两坐标轴是两个压缩序列,从后往前 DP,如果可以选一个不是当前块的值直接获胜那就选,否则一定是两人一直选择当前块想斜下方走,获胜状态是交替的。
设 \(ok_{i,j}\) 表示当前在两个压缩序列中的第 \(i\) 段和第 \(j\) 段,能否选一个其他值直接获胜,\(f_{i,j}\) 表示当前子序列匹配到第一序列 \(i\) 段第一个和第二序列 \(j\) 段第一个,能否获胜。容易从后往前更新,每次判断哪个段先走完和走的奇偶性即可。
用颜色段均摊加速这个过程,每次算出一个值后会覆盖一段区间的斜线,按照 \(i-j\) 的坐标做颜色段均摊即可。
D8T2
题面:
给出一个 \(n\) 个点的树,初始两人在根节点,每分钟两人可以独自选择一个儿子走到他或者不动,一个人可以瞬间传送到另一个人,问走过所有节点需要多长时间,\(n\leq 5\times 10^6\)
题解:
由于不能走向父亲,所以我们需要选择一条路径上的若干点,一个人站着不动,另一个人一直下去探索然后回来,当还剩最后两个叶子的时候两个人可以同时下去然后转送到一起。注意如果 \(x\) 是关键点,下一个关键点只考虑缩二度点之后 \(x\) 的子节点是不对的,因为可能 \(x\) 有一个短子节点和一个长叶子,子节点之后跟了一个很长的链,此时走完短子节点之后两个人再一起走剩下的两个长链是更优秀的。
暴力需要枚举子树每个点复杂度 \(n^2\),但是你可以分析到,设 \(up_x\) 是 \(x\) 的最深的祖先,满足其除去 \(x\) 子树后存在一个叶子比 \(x\) 更深,发现 \(x\) 的上一个关键点一定是 \(up_x\) 或者它父亲。可以分析其它情况发现一定可以直接从 \(up_x\) 更新或者在和上一个关键点之间加入一个 \(up_x\) 不劣。

浙公网安备 33010602011771号