做题记录 25.4.22
\(\textcolor{purple}\odot\) CF2068E Porto Vs. Benfica
令 \(g_i\) 表示删去一条 \(i\) 的邻边后 \(i\) 到 \(n\) 的最短路的最大值,\(f_i\) 表示删去一条边后 \(i\) 到 \(n\) 的最短路的最大值,则答案为 \(f_1\),\(f\) 的转移为
得到 \(g\) 后,使用类似 \(\text{dijkstra}\) 的方法,初始 \(f_i\gets\infty\),每次堆中取出一个 \(f_j\),对于其邻居 \(i\),用 \(\max(g_i,f_j+1)\) 跟新 \(f_i\),然后加入堆中,这部分时间复杂度为 \(O(m\log n)\) 的
考虑如何计算 \(g_i\)
建出最短路树,令 \(p_i\) 表示最短路树上的父亲,则在 \(g_i\) 的决策中,删去 \((i,p_i)\) 一定最优
因此 \(g_i\) 的意义转化为删去 \((i,p_i)\) 后 \(i\) 到 \(n\) 的最短路
令 \(\text{S}(i)\) 表示最短路树上 \(i\) 的子树,显然
令 \((x,y)\) 的边权为 \(\text{dis}(x,n)+\text{dis}(y,n)+1\),将边按边权从小到大排序,则 \(g_i\) 的值由第一次覆盖到它的边的边权决定
一条边 \((x,y)\) 能覆盖到 \(x\)(含)到 \(\text{lca}(x,y)\)(不含)的链上的 \(g_i\),使用并查集维护第一个没有覆盖到的祖先,时间复杂度 \(O(n\log n)\)(若使用 \(O(n)-O(1)\;\;\text{lca}\) 则可到 \(O(n\alpha(n))\))
总时间复杂度 \(O(m\log n)\)
\(\textcolor{purple}\odot\) CF1916H2 Matrix Rank (Hard Version)
令 \(f_{i,j}\) 表示前 \(i\) 个向量张成的空间维度为 \(j\) 的方案数,则答案为 \(f_{n,0\sim k}\),边界为 \(f_{0,0}\)
若第 \(i\) 个向量在之前的 \(i-1\) 个向量张成的 \(j\) 维空间中,这个空间内有 \(p^j\) 个向量,因此转移为 \(f_{i,j}\gets f_{i-1,j}p^j\)
否则前 \(i-1\) 个向量张成 \(j-1\) 维空间,空间内有 \(p^{j-1}\) 个向量,它们都不能选择,因此转移为 \(f_{i,j}\gets f_{i-1,j-1}(p^n-p^{j-1})\)
即转移方程为
相当于一个 \(n\times k\) 的网格,从 \((i-1,j)\) 走到 \((i,j)\) 的权值为 \(p^j\),从 \((i-1,j-1)\) 走到 \((i,j)\) 的权值为 \((p^n-p^{j-1})\),路径的权值为所有边的权值之积,对于每个 \((n,0\sim k)\) 求出从 \((0,0)\) 出发走到它的所有方案的路径权值和
对于 \((n,i)\),第二种转移的贡献为确定的 \(\prod_{j=1}^i(p^n-p^{j-1})\),令 \(g_{j,i-j}\) 表示只考虑第一种贡献下到 \((i,j)\) 的权值和,则
显然 \(f_{n,i}=g_{i,n-i}\times \prod_{j=1}^i(p^n-p^{j-1})\)
\(g_{i,j}\) 的组合意义为在 \(p^0,p^1,p^2,\cdots,p^i\) 中选择 \(j\) 个(可重复选择)乘起来的总权值
令 \(G_i(x)=\sum_{j\ge 0}g_{i,j}x^j\) 为 \(g\) 的生成函数
则根据组合意义,有
考虑
因此
由于 \(g_{i,0}=1\),可推出 \(g_{i,r}=\prod_{j=1}^r \frac{p^{i+j}-1}{p^j-1}\)
因此
容易做到 \(O(n\log V)\),应该可以优化到 \(O(n+\log V)\)
\(\textcolor{blue}\odot\) CF1914G2 Light Bulbs (Hard Version)
若两个区间相交但不包含,则选择两者之一的效果相同,令两者在同一等价类中
令极小的包含若干完整等价类的区间为段
则一段中的等价类互为包含关系,其中有且仅有一个没有被其它等价类包含(称其为该段的关键等价类),选择这个等价类中任意一个位置就可以覆盖整个段
因此第一个问题的答案为段的总数,第二个问题的答案为关键等价类的大小之积
对于每个数分配一个随机权值,令 \(s_i\) 表示 \(1\sim i\) 的前缀哈希和
则第一个问题答案为 \(=0\) 的 \(s_i\) 数量
令 \(ls_i\) 为最后一个 \(s_x=i\) 的 \(x\)(使用 map 或 unordered_map 实现)
在 \([0,2n)\) 内 \(=0\) 的 \(s_i\) 为一个段的左端点,从 \(i+1\) 开始,每次从 \(x\) 跳到 \(ls_{s_x}+1\),若跳到的位置 \(s\) 为 \(0\) 则结束,跳到的位置总数即为这一段中关键等价类的大小,各个关键等价类的大小的积即为第二个问题的答案
时间复杂度 \(O(\sum n\log n)\),若用 unordered_map 则 \(O(\sum n)\)
\(\textcolor{purple}\odot\) CF1913F Palindromic Problem
令 \(f(i,c)\) 表示 \(s_i\gets c\) 后回文串的数量
以下只考虑奇回文串,偶回文串处理方式类似
枚举回文中心 \(i\),考虑它对每个 \(f(x,c)\) 的贡献
令 \(p\) 为满足 \([L,R]=[i-p+1,i+p-1]\) 回文的最大值,则
- \(\forall 1\le x<L\lor x=i\lor R<x\le n\;(\forall c\;(f(x,c)\gets p))\)
- \(\forall L\le x<i\;(f(x,s_x)\gets p,\forall c\ne s_i\;(f(x,c)\gets i-x))\)
- \(\forall i<x\le R\;(f(x,s_x)\gets p,\forall c\ne s_i\;(f(x,c)\gets x-i))\)
若 \(L>1,R<n\),令 \(p_2\) 为满足忽略 \(s_{L-1},s_{R+1}\) 情况下 \([i-p_2+1,i+p_2-1]\) 回文的最大值,则
加上 \(p_2-p\) 是因为之前已经加上 \(p\) 了
这样对 \(f\) 的影响为若干单点 / 区间加、区间加一次函数,容易 \(O(1)\) 维护
求 \(p\) 和 \(p_2\) 建议用 \(\text{SA}\)
总时间复杂度 \(O(n\log n+n|\sum|)\)
\(\textcolor{blue}\odot\) CF1913E Matrix Problem
当 \(\sum a_i\ne\sum b_i\) 时显然不行
否则令 \(S=\sum a_i=\sum b_i\)
考虑先令所有 \(1\) 都变为 \(0\),设 \(1\) 的数量为 \(c_1\) 则用 \(c_1\) 步
建立一张二分图,左部 \(n\) 点,右部 \(m\) 点,左部第 \(i\) 个点需要被匹配 \(a_i\) 次,右部第 \(i\) 个点需要被匹配 \(b_i\) 次,左部 \(i\) 连向右部 \(j\),若 \(s_{i,j}=1\) 则边权为 \(-1\),否则为 \(1\)
若存在点的匹配次数不到要求则无解,否则最小改变次数为最小费用加上 \(c_1\)
发现直接跑网络流可能有负环
考虑给中间 \(n\times m\) 条边边权都加上 \(1\),最终答案减去 \(S\) 即可
时间复杂度 \(O(nm\sqrt{n+m})\)
\(\textcolor{purple}\odot\) CF1909F2 Small Permutation Problem (Hard Version)
假定 \(a_0=0\),若 \(a_n\ne -1\) 且 \(a_n\ne n\) 则无解,否则令 \(a_n\gets n\),若不是 \(-1\) 的 \(a\) 不是单调不降的则无解
对于 \(1\le i\le n,a_i\ne -1\),设 \(j\) 为前一个 \(\ne -1\) 的位置,称 \((i,j)\) 为一组间隔,显然答案为所有间隔的方案数之积
考虑如何计算一组 \((i,j)\) 的方案数
令 \(x=i-a_j,y=j-a_j,t=a_i-a_j\)
发现相当于在一个 \(x\times x\) 去掉一个角落的 \(y\times y\) 得到的图形中放置 \(t\) 个物体,要求任意两个物体不在同一行或同一列的方案数
容斥,枚举 \(y\times y\) 的范围内至少有 \(i\) 个,令 \(F(n,m)\) 表示 \(n\times n\) 中放置 \(m\) 个的方案数,则 \((x,y,t)\) 的方案数为
显然 \(F(n,m)=\binom nmA_n^m\)
时间复杂度 \(O(\sum n)\)

浙公网安备 33010602011771号