做题记录 25.4.22

\(\textcolor{purple}\odot\) CF2068E Porto Vs. Benfica

\(g_i\) 表示删去一条 \(i\) 的邻边后 \(i\)\(n\) 的最短路的最大值,\(f_i\) 表示删去一条边后 \(i\)\(n\) 的最短路的最大值,则答案为 \(f_1\)\(f\) 的转移为

\[f_i=\max(g_i,1+\min_{j\in N(i)}f_j) \]

得到 \(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\) 的子树,显然

\[g_i=\min_{(x,y)\mid (x,y)\in E,x\in \text{S}(i),y\notin\text{S}(i),(x,y)\ne (i,p_i)} \text{dis}(x,n)+\text{dis}(y,n)+1-\text{dis}(i,n) \]

\((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})\)

即转移方程为

\[f_{i,j}=f_{i-1,j}p^j+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)\) 的权值和,则

\[g_{i,j}=g_{i,j-1}p^i+g_{i-1,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(x)=\prod_{j=0}^i \sum_{l\ge 0}(p^jx)^l=\prod_{j=0}^i \frac1{1-p^jx} \]

考虑

\[G_i(px)=\prod_{j=0}^i \frac1{1-p^jpx}=\prod_{j=1}^{i+1} \frac1{1-p^jx} \]

因此

\[\begin{aligned} \frac1{1-p^{i+1}x}G_i(x)&=\prod_{j=0}^{i+1} \frac1{1-p^jx}=\frac1{1-x}G_i(px)\\ (1-x)G_i(x)&=(1-p^{i+1}x)G_i(px)\\ [x^r](1-x)G_i(x)&=[x^r](1-p^{i+1}x)G_i(px)\\ g_{i,r}-g_{i,r-1}&=p^rg_{i,r}-p^{i+1}p^{r-1}g_{i,r-1}\\ (p^{i+r}-1)g_{i,r-1}&=(p^r-1)g_{i,r}\\ g_{i,r}&=\frac{p^{i+r}-1}{p^r-1}\cdot g_{i,r-1}\\ \end{aligned} \]

由于 \(g_{i,0}=1\),可推出 \(g_{i,r}=\prod_{j=1}^r \frac{p^{i+j}-1}{p^j-1}\)

因此

\[\begin{aligned} f_{n,i}=&g_{i,n-i}\times \prod_{j=1}^i(p^n-p^{j-1})\\ =&\prod_{j=1}^{n-i} \frac{p^{i+j}-1}{p^j-1}\times \prod_{j=1}^i(p^n-p^{j-1})\\ =& \frac{\prod_{j=1}^{n-i}(p^{i+j}-1)}{\prod_{j=1}^{n-i}(p^j-1)}\times \prod_{j=1}^i(p^n-p^{j-1})\\ =& \frac{\prod_{j=i+1}^{n}(p^j-1)}{\prod_{j=1}^{n-i}(p^j-1)}\times \prod_{j=1}^i(p^n-p^{j-1})\\ =& \frac{\prod_{j=1}^{n}(p^j-1)}{\prod_{j=1}^{n-i}(p^j-1)\prod_{j=1}^i (p^j-1)}\times \prod_{j=1}^i(p^n-p^{j-1})\\ =& \frac{\prod_{j=n-i+1}^{n}(p^j-1)}{\prod_{j=1}^i (p^j-1)}\times \prod_{j=1}^i(p^n-p^{j-1})\\ \end{aligned} \]

容易做到 \(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\)(使用 mapunordered_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]\) 回文的最大值,则

\[f_{L-1,s_{R+1}}\gets p_2-p f_{R+1,s_{L-1}}\gets p_2-p \]

加上 \(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)\) 的方案数为

\[\sum_{i=0}^t (-1)^i F(x,i)F(y-i,t-i) \]

显然 \(F(n,m)=\binom nmA_n^m\)

时间复杂度 \(O(\sum n)\)

代码

参考

posted @ 2025-04-23 21:30  Hstry  阅读(8)  评论(0)    收藏  举报