做题记录 25.2.5
\(\textcolor{purple}\odot\) [ABC386G] Many MST
令 \(\nu(x)=\frac{x(x-1)}2\)
先把边权变为 \([0,m)\),最后将答案加上 \((n-1)\cdot m^{\nu(n)}\) 即可
令 \(U\) 为所有合法的完全图的集合,显然 \(|U|=m^{\nu(n)}\),令 \(G_k\) 为完全图中边权 小于 \(k\) 的边组成的子图,令 \(C(G)\) 为图 \(G\) 中联通块数量
则对于一个图 \(G\),其最小生成树边权和可以表示为 \(\sum_{k=1}^m (C(G_k)-1)=-m+\sum_{k=1}^m C(G_k)\)
答案为
其显然等于
考虑如何对于每个 \(1\le k\le m\) 求出 \(\sum_{G\in U} C(G_k)\)
每种联通块(边数和点数相同的为一类)分别计算贡献(即数量)
对于 \(E\) 点 \(V\) 边的联通块:对于在联通块内(两个端点都在联通块内)的边,边权 \(<k\) 的有 \(V\) 条,一共 \(k^V\) 种;其余 \(\nu(E)-V\) 条边边权 \([k,m)\),共 \((m-k)^{\nu(E)-V}\) 种选择;对于联通块外的边,边权任意,共 \(m^{\nu(n-E)}\) 种;对于联通块边缘(一端在联通块内,一端在外),共 \(E(n-E)\) 条,边权为 \([k,m)\),共 \((m-k)^{E(n-E)}\) 种
总贡献为
令 \(f(E)\)(对于每个 \(k\) 分别计算一遍)为所有 \(E\) 点的 联通块 中 \(k^V (m-k)^{\nu(E)-V}\) 之和
则所有 \(E\) 点联通块的总贡献为
即总答案为
预处理次幂(\(0\sim 500\) 的 \(0\sim 250000\) 次,空间足够存储)和组合数,若能对于所有 \(k\) 求出 \(f(1\sim n)\),容易 \(O(n^2)\) 计算答案,问题转化为计算 \(f\)
对于一个 \(f(E)\),所有边的总方案数为 \(k^{\nu(E)}\),然后减去不联通的方案数,枚举第 \(E\) 个点所在子联通块的点数 \(i\),可得
时间复杂度 \(O(n^2m)\)
\(\textcolor{purple}\odot\) [AGC003F] Fraction of Fractal
当给定图形上下联通且左右联通时,\(k\) 阶图形整体联通,只有 \(1\) 个联通块
当给定图形上下左右都不联通时,\(k\) 阶图形联通块数量为 \(cnt^{k-1}\),其中 \(cnt\) 为 \(1\) 阶图形中 \(\#\) 的数量
然后考虑左右联通但上下不联通的情况(另一种情况翻转即可)
令 \(x_i\) 表示第 \(i\) 阶中 \(\#\) 的数量,令 \(t_i\) 表示第 \(i\) 阶中左右相邻且都为 \(\#\) 的数量,令 \(f_i\) 表示第 \(i\) 阶中最左侧和最右侧都是 \(\#\) 的行的数量
则答案为 \(x_{k-1}-t_{k-1}\)(因为从第 \(2\) 阶开始,每行之间就互相独立了,一行中若有两个相邻,对应在 \(k\) 阶中就是两个 \(1\) 阶的左右相连,因此联通块数量会减 \(1\))
\(x_1,t_1,f_1\) 容易 \(O(n^2)\) 计算
显然 \(x_i=x_{i-1}\times x_1\),\(f_i=f_{i-1}\times f_1\)
从第 \(i-1\) 阶到第 \(i\) 阶,相当于将第 \(i-1\) 中每个 \(\#\) 都换成第 \(1\) 阶,这样第 \(i-1\) 中每对左右相邻的在第 \(i\) 阶中对应 \(f_1\) 对,第 \(i-1\) 阶中每个 \(\#\) 又新产生 \(t_1\) 对,因此 \(t_i=t_{i-1}\times f_1+x_{i-1} \times t_1\)
将递推过程写为矩阵相乘的形式为
矩阵快速幂即可
时间复杂度 \(O(n^2+\log k)\)
\(\textcolor{purple}\odot\) [AGC006D] Median Pyramid Hard
考虑二分答案,$\ge $ 二分值的设为 \(1\),\(<\) 二分值的设为 \(0\),该数组记为 \(b\)
记数组 \(b_{1\sim 2n-1}\) 经过 \(k\) 次变换后结果为 \(b^k_{1+k\sim 2n-1-k}\)
若 \(b\) 中存在相邻的相同元素,则经过若干次变换后对应两个位置依然相同(除非超出边界)
找到最靠近 \(n\) 的一对相同元素,则最终剩下的值等于这对元素的值
显然满足条件的元素对可能有两对,但值一定唯一
最靠近中间的一对相同元素 到 中间位置,该区间中一定 \(0/1\) 交错,经过若干次变换后依然 \(0/1\) 交错,且这个结构会令那对相同元素向中间延伸,最后成为唯一留下来的值
若不存在相邻的相同元素,则说明整个 \(b\) 都是 \(0/1\) 交错,此时剩下来的值等于 \(b_1\)
单次判断时间复杂度 \(O(n)\)
总时间复杂度 \(O(n\log n)\)
\(\textcolor{purple}\odot\) [AGC005D] ~K Perm Counting
考虑容斥
令 \(t_x\) 为有至少 \(x\) 个位置满足 \(|p_i-i|=k\) 的方案数,则最终答案为 \(\sum_{i=0}^n (-1)^i t_i\)
令 \(g_x\) 表示选出 \(x\) 个 \(p_i\) 和 \(i\) 一一配对,满足每对都有 \(|p_i-i|=k\) 的方案数,则 \(t_x=(n-x)! g_x\)
建立 \(2n\) 个点,分别表示 \(p_{1\sim n}\) 和 \(1\sim n\),满足 \(|p_i-i|=k\) 的之间连无向边,则 \(g_x\) 相当于在这张图上选择大小恰好为 \(x\) 的匹配的方案数
显然这张图为链的集合,且其中 \(2(n\bmod k)\) 条有 \(\lfloor\frac nk\rfloor+1\) 个点,剩余 \(2k-2(n\bmod k)\) 条有 \(\lfloor\frac nk\rfloor\) 个点
即 \(2(n\bmod k)\) 条 \(\lfloor\frac nk\rfloor\) 条边的链,\(2k-2(n\bmod k)\) 条 \(\lfloor\frac nk\rfloor-1\) 条边链,选择其中 \(x\) 条,满足任意两条选择的不相邻,求方案数
容易 \(dp\) 解决,时间复杂度 \(O(n^2)\)
可以使用生成函数和多项式做到 \(O(n\log n)\)
\(\textcolor{purple}\odot\) [AGC004E] Salvage Robots
先转化为出口在平面上移动,并把超出边界的部分删去,最大化经过的数字之和
令出口坐标为 \((sx,sy)\)
令 \(dp_{u,d,l,r}\) 表示出口覆盖区域为 \((sx-u\sim sx+d,sy-l\sim sy+r)\) 的情况下最优解,则答案为 \(dp_{sx-1,n-sx,sy-s,m-sy}\),边界为 \(dp_{0,0,0,0}=1\)
转移时考虑向四个方向分别扩展一格,以向上为例
令 \(L=\max(sy-l,r+1)\),\(R=\min(sy+r,m-l)\),\(U=\max(sx-u,d+1)\),\(D=\min(sx+d,n-u)\),表示当前为止还没有清空且能取到的区域的边界
若 \(sx-u\le d+1\),则上方已经被清空过了,转移为
否则转移为
此处 \(L\sim R\) 表示每个取值求和
预处理 \(a\) 的二维前缀和,时间复杂度 \(O(n^4)\),需要将 \(dp\) 设为 short 卡空间
\(\textcolor{purple}\odot\) [AGC007D] Shik and Game
令 \(f_i\) 表示 \(1\sim i\) 号都已经收集了金币,\(i+1\sim n\) 号还没有送过糖的最小时间,转移为
表示先从 \(j\) 走到 \(i\),给 \((j,i]\) 的都发糖果,然后走回 \(j\),等待 \(\max(0,T-2(a_i-a_j))\) 时间后回到 \(i\),并收集 \((j,i]\) 的金币
暴力转移为 \(O(n^2)\) 的
先把所有 \(a_i-a_j\) 提出,最后 答案加上 \(E\) 即可,转移为
双指针求出 \(T>2(a_i,a_j)\) 的 \(j\) 的区间,记录区间以内的 \(f_j-2a_j\) 的最小值,记录区间以外的 \(f_j+T\) 的最小值
时间复杂度 \(O(n)\)

浙公网安备 33010602011771号