做题记录 26.4.14

\(\textcolor{purple}\odot\) AT_agc038_d [AGC038D] Unique Path

只考虑 \(0\) 类边的每个连通块,显然导出子图必然为树,且树的每条边在图上都是割边

设连通块数为 \(k\),则树中用去 \(n-k\) 条边,剩余 \(m-n+k\) 条必然在连通块之间

对于每个连通块,向外的边可以集中到一个点上,显然不影响结果,称选出的为关键点

若不存在 \(1\) 类边,则连通块之间至少 \(k-1\) 条(关键点之间连为树),最多 \(\binom k2\) 条(关键点之间连为团)

若存在 \(1\) 类边,若只有两个连通块则不合法(只有两个关键点,不可能成环,因为不允许重边),若存在一条 \(1\) 类边两个端点在同一连通块中则不合法(此处包含了一个连通块的情况),否则至少 \(k\) 条(连为环),至多 \(\binom k2\)

容易做到 \(O(n+q)\)

代码

参考

\(\textcolor{purple}\odot\) AT_agc047_c [AGC047C] Product Modulo

模数为质数,因此可以求出原根,\((a_i\times b_i)\bmod p=\exp(\ln a+\ln b)\),其中 \(\ln\) 表示离散对数,\(\exp\) 为离散指数

\(c_x=\sum_i [\ln a_i=x]\),对 \(c\)\(\text{NTT}\) 即可(注意选用模数需要在 \(4\times 10^{10}\) 以上)

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

代码

\(\textcolor{purple}\odot\) AT_agc049_d [AGC049D] Convex Sequence

\(a\) 下凸,考虑最小值左右分别处理

显然最小值为一个区间,这个区间左右长度都不超过 \(O(\sqrt m)\)

\(f_{i,j}\) 表示填了 \(a_{1\sim i}\),它们总和为 \(j\),且假定 \(a_{i+1}=0\) 的情况下 \(a_{1\sim i+1}\) 下凸

转移时,考虑差分数组追加 \(1\) 或全加 \(1\),容易做到 \(O(m\sqrt m)\)

\(g_{i,j}\) 表示目前左右总和为 \(j\),钦定右侧还需要加入 \(i\) 个数,且假定右侧的前一个数为 \(0\) 的情况下右侧下凸的方案数

初始 \(g_{i,j}\gets \sum_{k\mid i+k<n} f_{i,j}\)\(g\) 转移和 \(f\) 类似

答案为 \(\sum_i g_{0,m-n\times i}\),即枚举最小值

时间复杂度 \(O(m\sqrt m+\frac mn)\)

代码

\(\textcolor{purple}\odot\) AT_agc043_c [AGC043C] Giant Graph

显然贪心地选择最优

每条边从小到大定向,考虑以下博弈:三个棋子,每次可以选择一个移动一步,无法操作为败

则可证最优状态下 \((i,j,k)\) 被选入独立集当且仅当以 \((i,j,k)\) 为起点的博弈先手必败

三张图独立,分别算出每个点的 \(\text{SG}\) 函数,则需要统计函数值异或和为 \(0\) 的三元组的权值和

显然 \(\text{SG}\) 函数值为 \(O(\sqrt m)\)

容易做到 \(O(n+\sum m)\)

代码

\(\textcolor{purple}\odot\) AT_agc055_c [AGC055C] Weird LIS

令序列的 \(\text{LIS}\)\(k\),则 \(a_i\in \{k-1,k\}\),令 \(a_i\) 减去 \(k\)\(a_i\in \{-1,0\}\)

排列中的位置可以分为四类:

  1. 关键点:在所有 \(\text{LIS}\) 的交中
  2. 非关键点:在当前钦定的 \(\text{LIS}\) 中但不是关键点
  3. 替代点:可以替代非关键点的点
  4. 无用点:不在 \(\text{LIS}\) 的并中

其中关键点的 \(a\)\(-1\),其余为 \(0\),且关键点和非关键点的数量之和等于 \(L\)

若一个非关键点有多个替代,则只保留第一个,其余视为无用点

对于固定的 \(a\)\(L\),可证存在一种构造排列的方式使得非关键点和替代点必然相邻

贪心的尽量让非关键点靠前,则最终结构为:相邻的两个关键点之间(包括第一个关键点之前和最后一个关键点之后)的部分,一段前缀为若干组非关键点和替代点,剩余部分为无用点

由此容易建立自动机,四个状态分别表示填完四类点

注意边界情况

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

代码

参考

\(\textcolor{purple}\odot\) AT_agc067_a [AGC067A] Big Clique Everywhere

定理:原图合法当且仅当补图为二分图

证明:

  • 原图任意导出子图存在不小于一半的团,等价于补图任意导出子图存在不小于一半的独立集
  • 若非二分图,则任取一个奇环,独立集必然小于一半
  • 若是二分图,对导出子图黑白染色,取两种颜色中较多的一个即可,必然不小于一半

由于全集需要满足要求,因此原图最大团必须不小于 \(\binom{\lceil\frac n2\rceil}2\),当 \(m<\binom{\lceil\frac n2\rceil}2\) 时必然不合法,从而只需要考虑 \(n=O(\sqrt m)\) 的情况

总时间复杂度 \(O(\sum m)\)

代码

\(\textcolor{purple}\odot\) AT_agc062_b [AGC062B] Split and Insert

倒序考虑,转化为每次取出一个子序列放到最后,代价为这个子序列的长度乘以权值

\(dp_{i,l,r}\) 表示操作 \(i\sim k\) 中使值 \([l,r]\) 的位置有序的最小代价

初始 \(dp_{k+1,l,r}=[\text{is\_sorted}(p^{-1}_{l\sim r})]\),答案为 \(dp_{1,1,n}\)

转移为

\[dp_{k,l,r}\gets dp_{k+1,l,r} \]

\[dp_{k,l,r}\gets dp_{k+1,l,x}+dp_{k+1,x+1,r}+c_k\times(r-x) \]

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

代码

参考

posted @ 2026-04-15 06:49  Hstry  阅读(4)  评论(0)    收藏  举报