2023-2-4 #33 昨天被匆匆地裁切 与前日白昼梦拼贴
——霾《世界沉睡童话》
184 P9005 [RC-07] 超超立方体
怎么这么多人会做!!!
两个图笛卡尔积的 Laplace 特征值为两个图特征值集合中任选一个相加的所有可能值。题目里的超立方体就是若干完全图的笛卡尔积。
一张完全图的 Laplace 矩阵 \(A\) 形为对角线 \(n-1\),其余位置 \(-1\),而 \(nI-A\) 为全 \(1\) 矩阵,全 \(1\) 矩阵秩为 \(1\),所以只有一个非零特征值,而迹为 \(n\) 因此另一个为 \(n\)。由全 \(1\) 矩阵的特征值作用 \(n-x\) 后得到完全图的 Laplace 矩阵:\(n-1\) 个 \(n\) 与一个 \(0\)。
矩阵树定理事实上说的是,一个连通图的生成树数量等于 Laplace 矩阵特征值之积除以点数。而我们可以通过特征值数量计算生成树数量:
使用背包计算一下就好了,复杂度 \(O(n^2\max a_i)\)。
185 CF1781H2 Window Signals (hard version)
枚举一下包含灯的最小矩形大小 \(a\times b\),容斥一下四个边界是否有灯。
零个、一个 ban 位置都弱于两个的情况,我们不妨只考虑两个。
很容易让两个灯翻折成左下、右上关系,正难则反,我们计算任意两个对应位置都有一个灯的图案数量。
可以形成若干链,每条链相邻至少选一个,系数就是斐波那契数,没有限制的就是二的次幂,直接 \(O(n^2)\) 计算就可以 \(O(n^4)\),事实上可以过 Hard Version。
事实上枚举链开头的一维,长度数量是 \(O(1)\) 种,仔细算算应该就是 \(O(n^3)\) 了。
186 ARC155F Directable as Desired
谔谔题。
考察生成一棵有向树的方法:
- 任意定根;
- 将父边朝向祖先的点集 \(|S|\) 加入,形成若干 \(n-|S|\) 个根向森林;
- 剩下的点连出 \(n-|S|-1\) 条朝向儿子的边。
第一步可以令根为 \(1\)。
第三步任意给边钦定一个字典序依次加入,每次任选一个森林的根作为儿子,这样方案数是 \((n-|S|-1)!\),注意边有顺序。
第二步根据扩展 Cayley 定理:\(n\) 个点,生成 \(k\) 个叶向树且根为 \(1,2,\cdots,k\) 的方案数为 \(kn^{n-k-1}\)。(很容易用拉反推出)
于是第二步方案数为 \((n-|S|)n^{|S|-1}\prod_{i\in S}d_i\),因为挑选父边还有方案数。
那么依次考虑每个点是否在 \(S\) 内,就是一个分治 NTT 形式,复杂度 \(O(n\log^2 n)\)。
187 CFgym104077K Streets
不是很难!juju 提示了凸壳和倍增就差不多会做了。
枚举两边边长,那么权值和肯定直接取 \(\min\),暴力预处理一下 \(\min\)。
那么询问就可以写为 \(aq_b+bp_a\leqslant c\) 的 \(a\times b\) 最大值。
枚举 \(a\),可以单调地枚举 \(b\) 来 check 是否有一个大于等于 \(b_0\) 的 \(b\) 满足 \(aq_b+bp_a\leqslant c\)。
这个事实上是用一条直线切一个后缀的 \((b,q_b)\) 形成的凸壳,如果可以离线我们可以从后往前加点,然后每次询问二分。
可是这个过程必须在线地回答,我们可以先从后往前加点做一次凸壳,每加入一个点就记录其在凸壳上的后继。于是,\(\geqslant b_0\) 的 \((b,q_b)\) 组成的凸壳就是 \(b_0\) 后第一个点不断跳后继拉出来的一条链。
我们倍增地做二分这个过程就可以啦,复杂度 \(O(n^2+m^2+TV\log V)\)。
188 CFgym104077I Square Grid
一个很厉害的容斥:
类似两条线的反射容斥,我们可以用 \((n+1)\times(n+1)\) 的正方形把平面平铺,终点可以通过与最近的线段作对称在每一个小正方形内得到一个镜像。
我们断言,将正方形黑白染色后(假设初始正方形为白色),到达所有白色正方形的方案数减去到达所有黑色正方形的方案数就是答案。
那么我们可以分行列奇偶性拆成四组问题,每一组问题旋转坐标 45 度将行列分离,变成两个 \(x^k(x+x^{-1})^t\bmod(x^{2n+2}-1)\) 之类的问题,
初始多项式快速幂预处理一下系数就好啦,复杂度 \(O(n\log n\log t+q)\)。

浙公网安备 33010602011771号