做题记录 26.2.17

\(\textcolor{black}\odot\) AT_arc112_f [ARC112F] Die Siedler

显然最优策略为从前往后能换就换,因此假定操作可逆答案不变

由此可以将所有数字都换到 \(c_1\),即 \(c_1\gets \sum_{i=1}^n c_i 2^{i-1} (i-1)!\)

从前往后换一圈可以令 \(c_1\) 减小 \(2^n n!-1\),令 \(s=2^n n!-1\),显然换出来的 \(c_1\le s\)

对于 \(x>0\),令 \(f(x)\) 表示只有 \(c_1=x\),其余为 \(0\) 的情况下的答案,显然最优策略为从前往后贪心,时间复杂度 \(O(n)\)

\(m\) 个卡包换到 \(c_1\) 后值分别为 \(a_{1\sim m}\),初始状态为 \(q\)

若第 \(i\) 个卡包用了 \(x_i\) 个,则最终状态为 \(p=q+\sum_{i=1}^m a_i x_i-y s\),其中 \(y\) 为使 \(p>0\) 的最大值

答案为所有可达的 \(p\)\(f(p)\) 的最小值

根据裴蜀定理,\(p\) 可达当且仅当 \(\gcd(a_1,a_2,\cdots,a_m,s)\mid (p-q),p\ge \max(1,q\bmod d)\),令 \(d=\gcd(a_1,a_2,\cdots,a_m,s)\),则 \(p=(q\bmod d)+kd\),其中 \(d\mid q\)\(k>0\),否则 \(k\ge 0\)

显然 \(q\le s\),考虑根号分治,设阈值为 \(S\)

\(d>S\) 时,枚举 \(k\),只有 \(O(\frac sd)\) 种可能,每种 \(O(n)\) 计算 \(f\),时间复杂度 \(O(\frac {ns}S)\)

\(d\le S\) 时,使用同余最短路即可做到 \(O(nd)\)

总时间复杂度 \(O(\max(\frac {ns}{S},nS))\),取 \(S=\sqrt s\),时间复杂度 \(O(n\sqrt s)\)

代码

参考

\(\textcolor{black}\odot\) P8276 [USACO22OPEN] Hoof and Brain P

若一组询问 \((u,v)\)\(u,v\) 之一不可达环,必然先手胜,从图中删去不可达环的点,这部分容易做到 \(O(n+m)\)

初始每个点颜色为自身编号,若一个点所有前驱都同色则将它设为相同颜色,则一组询问 \((u,v)\) 先手胜当且仅当最终 \(u,v\) 同色,正确性显然

问题转化为如何快速实现染色的过程

维护每个点所有出边指向的点中每种颜色的出现次数(map 保存),不断去除种类数 \(\le 1\) 的跟新即可

时间复杂度 \(O((n+m)\log n)\)

代码

参考

\(\textcolor{black}\odot\) AT_agc036_d [AGC036D] Negative Cycle

转化为差分约束

\(d_i\) 为距离,令 \(f_i=d_{i+1}-d_i\)

对于所有 \(i\to i+1\) 等价于 \(f_i\ge 0\;(0\le i<n)\)

若保留 \(i<j\),则等价于 \(d_j\le d_i-1\),即 \(\sum f_{i\sim j-1}\ge 1\)

若保留 \(i>j\),则等价于 \(d_j\le d_i+1\),即 \(\sum f_{j\sim i-1}\le 1\)

对于确定的 \(f_{0\sim n-1}\),显然尽量保留满足要求的边最优,因此当 \(f_i>1\) 时令 \(f_i=1\) 一定不劣,从而 \(f_i\in\{0,1\}\)

\(dp_{i,j}\;(j<i)\) 表示考虑 \(f_{0\sim i}\)\(f_i=1\)\(f\) 中上一个 \(1\)\(j\),此情况下最少删去的数量

\(f_p=1,f_l=1,f_r=1\) 为相邻的三个 \(1\),则 \(l\sim r\) 部分要求不存在 \(l<i<j\le r\)\(p<j\le l<r<i\le n\),两者的代价容易二维前缀和优化,记为 \(F(p,l,r)\)

则转移为 \(dp_{j,k}+F(k,j,i)\to dp_{i,j}\),统计答案是容易的

时间复杂度 \(O(n^3)\)

代码

参考

\(\textcolor{black}\odot\) AT_agc070_b [AGC070B] Odd Namori

转化为:\(n\) 个点分别确定一条出边,要求出边不是给定的父边,选择点的一个子集 \(S\),使得 \(S\) 的导出子图为若干环,贡献为 \((-1)^e\),其中 \(e\) 表示这些环中偶环的数量

枚举 \(S\),则点集外任意选择一条非父边即可,若 \(1\in S\) 则贡献为 \((n-1)^{n-|S|}\),否则贡献为 \(n(n-1)^{n-|S|-1}\),点集内部的贡献为将 \(S\) 划分为若干环后 \((-1)^e\) 之和,且要求边非树上父边

枚举 \(c\),表示钦定 \(c\) 条树边被选

显然选择的树边必须形成树上若干直链,否则无法成环

将这些链视为点,若点数量 \(>1\),对于一种方案取两点交换出边,显然偶环数量奇偶性变化,从而贡献抵消,因此只需要考虑点数量为 \(1\),即选择的树边恰好形成树上一条直链的方案数

若链没有遍历 \(S\) 中点,将链中点缩为一点后再选择两点交换出边,贡献抵消,从而只需要考虑链恰好取遍 \(S\) 中点的情况

此时贡献为 \((-1)^{|S|-1}(-1)^{[2\mid|S|]}=1\)

从而当 \(S\) 中点为树上一条祖先后代链时贡献为 \((n-1)^{n-|S|}+[1\in S](n-1)^{n-|S|-1}\),否则无贡献

直接枚举链可以做到 \(O(nd)\),其中 \(d\) 为树高

容易优化到 \(O(n)\)

代码

参考

posted @ 2026-02-18 08:46  Hstry  阅读(4)  评论(0)    收藏  举报