做题记录 26.3.31

\(\textcolor{purple}\odot\) AT_agc013_d [AGC013D] Piling Up

\(f_{i,j}\) 表示 \(i\) 次操作后 \(j\) 个红色的方案数,容易 \(O(nm)\) \(dp\),对 \((n,m)\)\((n-1,m)\) 分别求一遍即可

时间复杂度 \(O(nm)\)

代码

参考

\(\textcolor{purple}\odot\) AT_agc013_e [AGC013E] Placing Squares

拆贡献,转化为将 \(1\sim n\) 划分为若干段,每一段中先后选择两个位置,部分位置不能分开,令 \(f_{i,0/1,0/1}\) 表示 \(1\sim i\),最后一段是否选择第一个位置,是否选择第二个位置,容易矩阵优化到 \(O(m\log n)\)

代码

\(\textcolor{purple}\odot\) AT_agc016_d [AGC016D] XOR Replace

\(a_{n+1}=\bigoplus_{i=1}^n a_i\)\(b\) 同理,则等价于每次选择一个位置和 \(n+1\) 位置交换,求最小操作次数

显然若两个数列(加入 \(n+1\) 位置后)的可重集不同则无解,其它情况必然有解,一个构造为用三次操作交换任意两个位置,考虑优化操作次数

假设确定了每个 \(a_i\)\(b_i\) 中对应的位置,得到一个置换,对于其中任意一个置换环,先一次操作使 \(n+1\) 连到置换环上(若 \(n+1\) 本来就在置换环上则无需这次操作),之后每次操作可以使 \(n+1\) 下一个元素独立为自环

从而操作次数为 \(a_i\ne b_i\)\(i\) 数量加上不含 \(n+1\) 的置换环数量,需要最小化后者

建图,\(a_i\)\(b_i\) 连边,则后者等于不含 \((a_{n+1},b_{n+1})\) 的非孤点连通块数量(显然任意一个连通块都存在欧拉回路,从而可以对应一个置换环)

容易做到 \(O(n\log n)\)

代码

\(\textcolor{purple}\odot\) AT_agc016_e [AGC016E] Poor Turkeys

\(f_{i}\subset [1,n]\) 表示为了保留 \(i\) 而需要间接保留的集合,初始 \(f_i=\{i\}\),倒序枚举 \((u,v)\),若 \(u,v\) 都在 \(f_i\) 中则 \(i\) 无法被保留,若其中一个在 \(f_i\) 中则另一个也加入

最后枚举可能被保留的点对 \(i<j\),若 \(f_i\cap f_j\ne\varnothing\) 则可以被保留

时间复杂度 \(O(nm+\frac{n^3}\omega)\)

代码

参考

posted @ 2026-04-01 07:11  Hstry  阅读(2)  评论(0)    收藏  举报