做题记录 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)\)

浙公网安备 33010602011771号