W
e
l
c
o
m
e
: )

SS 集训做题

9.11 主题:分块

9. 主题:计数

Problem A

矩乘板子

Problem B

观察到 N 很小。记 \(f_{i, S}\) 为第 \(i\) 列状态为 \(S\) 的方案数,\((2^8)^2\) 预处理,\((2^8)^3\) 暴力转移即可。

Problem C

Problem I

给定 \(n \leq 10^{17}, K \leq 40, F\) 为 fibonacci 数列,求:

\[\sum_{i=1}^{n} F_{n} \times i^{K} \]

先暴力推推柿子,记 \(S_{i}(K)=F_{i} \times i^{K}\), sum \(_{i}=\sum S_{i}(K)\)

\[\begin{gathered} S_{i}(K)=\left(F_{i-1}+F_{i-2}\right) i^{K} \\ =F_{i-1} i^{K}+F_{i-2} i^{K} \end{gathered} \]

一般地,我们希望拆开后下标对应,所以重写成 :

\[=F_{i-1}(i-1+1)^{K}+F_{i-2}(i-2+2)^{K} \]

二项式定理

\[\begin{gathered} =F_{i-1}\left(\sum_{k=0}^{K} C_{K}^{k}(i-1)^{k}\right)+F_{i-2}\left(\sum_{k=0}^{K} C_{K}^{k}(k-2)^{k} 2^{K-k}\right) \\ =\sum_{k=0}^{K} C_{K}^{k}\left(F_{i-1}(i-1)^{k}+F_{i-2}(i-2)^{k}2^{K-k}\right) \\ =\sum_{k=0}^{K} C_{K}^{k}\left(S_{i-1}(k)+S_{i-2}(k) 2^{K-k}\right) \end{gathered} \]

\[S_{i}(K)=\sum_{k=0}^{K} C_{K}^{k} S_{i-1}(k)+C_{K}^{k} 2^{K-k}S_{i-2}(k) \]

现在就可以矩阵乘法了。

9. 主题:线段树

要来力(

T1

\(N \times N (N \le 10^{18})\) 正方形中,有 \(K (K \le 10^{5})\) 个红点点,每一个时刻,每一个红点都会往 (上下左右左上左下右上右下)外拓展,求多少时刻整个地图变红。

\(Solution\)

  1. 二分时刻,问题转化为求矩形面积并,扫描线即可,复杂度 \(O(n \log^2 n)\)

  2. 不难发现这只是个切比雪夫距离问题,分别按 \(x, y\) 排序 \(O(n)\) 扫一遍即可,复杂度 \(O(n \log n)\)

T2

\(N (N \le 3.5 \times 10^5)\) 矩形分布在 \(M \times M (M \le 1.5 \times 10^3)\) 的地图上,求去掉两个矩形之后所有矩形面积并的最小值。

\(Solution\)

考虑差分,先把矩形丢到地图里,差分得到每个点被覆盖到多少次,显然不能要次数超过 \(2\) 的点,统计每个矩形独立覆盖的点,然后枚举每一个点作为两个矩形的交点,用 \(map\) 统计同类型点共多少个,这就是两个矩形的交。

如何拿到覆盖其的编号?珂以哈希,我选择在差分的时候在维护覆盖每个点的编号和/编号平方和,小学数学知识就珂以得到两个编号了。

复杂度 \(O(m^2\log m^2)\)

T3

给定 \(N \times M\) 的二维网格,其中有 \(K\) 个黑点。
\(Q\) 个询问,每个询问给定一个 \((x_i,y_i)\),问有多少个矩形的顶点落在该指定网格,且不包含黑点。\((N,M,K,Q \le 10^5)\)

\(Solution\)

考虑把询问拆成四个类似的问题(把在一个询问点画一个坐标系,就发现是四个一模一样的矩形减柱子问题),把询问离线下来,问题转化为一个询问右上角,求与原点围成的矩形,去掉黑点所代表的的柱子,的面积。

T4

sb 暴力题。

T5

Alice 有 N 堆石子,第 i 堆石子数量为 \(A_i\)
Q 次事件:

  • Alice 买了一些石子,使得第 x 到 y 堆的石子全部变成 \(\max(A_i, z)\)

  • Bob 过来找 Alice 挑战,指定使用第 x 到第 y 堆的石子,以及 Bob 额外带的一堆数量为 z 的石子,一起进行一次 Nim 游戏,问 Alice 第一步有多少种必胜操作

不难发现操作 1 就是吉如一线段树板子维护区间最小值/次小值/最小值个数 \(Mn, Se, Cnt\)

对于操作 2,记 \(K=Xor_{i=x}^{y}A_i xor z\),可选的 \(A_i\) 必然需要与 \(K\) 的最高位相同,于是维护区间异或和,二进制下每一位有多少个 1 即可。

复杂度 \(O(32n\log n)\)

T6

区间加,区间除法向下取整,区间求 \(\max\),区间回退。

在线段树上维护 \(\max\)、清零标记 \(clr\)、滞空标记 \(a\)、除法标记 \(c\),加法标记 \(b\),优先级从左到右。

pushdown

\[a_v/c_u+b_u \to a_v,c_vc_u \to c_v,b_v/c_u+b_u\to b_v \]

10. 杂题选做

A

我们先把 \(c\) 全都看成 1

考虑直接对于单词询问 DP,记到 \(j\)、加油 \(k\) 次所需要的油箱最小值。

\[dp_{j, k}=\min\{ \max \{ dp_{j', k-1}, \operatorname{dist}(j', j) \} \} \]

不难发现,我们最后只要乘回 \(c\) 即可得到正确答案。

那么我们只要将其看成全源的,然后提前预处理,即可单次 \(O(1)\) 回答,复杂度 \(O(m+n^3)\)

B

C

枚举每一位,若 \(x\)\(k\) 有贡献当且仅当有奇数个数 在 \([2^{k}, 2^{k+1}-1] \cup [2^{k}+2^{k+1}, 2^{k+2}-2]\) 内,排序后 \(\operatorname{two-pointer}\) 即可。

D

白给状压。

E

F

G

显然答案在第一个区间上是一条链。

主题:计数

A

容斥

sb qifan 还想 FFT + 母函数

B

容斥,qifan 还在想 \(O(n^3)\) DP。。。。

\(O(n\log n)\) 容斥不是爽上天?

只满足 1 行

\[k^n-(k-1)^n \]

\(s\) 列不合法

\[t_s=k^{n-s}(k-1)^s-(k-1)^n \]

那么 \(ans=\sum_{i=0}^{n} (-1)^i C_n^i t_i^n\)

C

人麻了,人均斯特林。

\[ans=C_n^{n-k} (n-k)! \begin{Bmatrix} n \\ n-k \end{Bmatrix} \times [k=0?1:2] \]

\[\begin{Bmatrix} n \\ k \end{Bmatrix}=\begin{Bmatrix} n-1 \\ k-1 \end{Bmatrix}+k\times \begin{Bmatrix} n-1 \\ k \end{Bmatrix} \]

\(\begin{Bmatrix} n \\ k \end{Bmatrix}\) 表示将 \(n\) 个球放进 \(k\) 个盒子的方案数。

\(\begin{Bmatrix} n \\ k \end{Bmatrix}=\frac{1}{k!}\sum_{i=0}^k (-1)^i C_k^i (k-i)^n\)

D

E

考虑倒推

\(ri_{i, j}, dw_{i, j}\)

若没有石子的限制,则:

\[dw_{i, j}=\sum_{i'>i} ri_{i', j} \]

\(ri\) 同理。

如果有石头其实就是考虑这条线上有多少石头而已。

F

人均傅里叶,你妈。

\(f(p)\) 为排列 \(p\) 所产生的 贡献,

显然

\[E=\frac{\sum f(p)}{n!} \]

\[f(p)=(((X_{p_1}+1) \times X_{p_2})+1)\times \dots \]

显然这个形式就是:

\[\sum f(p)=\sum_{i=0}^{n} \prod_{p_1<p_2<p_3 \dots < p_i} A_{p} \]

G

\[ans=\frac{n! \times n!}{n^n} \]

H

CF1637 专题

鸽子来喽!

C

小分讨奇数个数即可,注意 \(n=3,a_2=0 \mod 2\) 的情况 -1.

D

记所求为 \(L\),则:

\[2\times L+\sum_{i=1}^n 4a_i^2+4b_i^2=\sum_{i=1}^n\sum_{j=1}^n(a_i+a_j)^2+(b_i+b_j) \]

\[=\sum_{i=1}^{n}\sum_{j=1}^n a_i^2+a_j^2 +2a_ia_j+b_i^2+b_j^2 +2b_ib_j \]

\[=(2n\times\sum_{i=1}^na_i^2+b_i^2)+2(\sum_{i=1}^{n}\sum_{j=1}^n a_ia_j+b_ib_j) \]

考虑到交换 \(a_i,b_i\) 不能使前面变化,因此让 \(\sum_{i=1}^{n}\sum_{j=1}^n a_ia_j+b_ib_j\) 最小即可。

\[\sum_{i=1}^{n}\sum_{j=1}^n a_ia_j+b_ib_j=\sum_{i=1}^n a_isum_{a}+b_isum_b=sum_a^2+sum_b^2 \]

又考虑 \(S=\sum a_i+b_i=sum_a+sum_b\) 为定值。

\[=sum_a^2+(S-sum_a)^2=2sum_a^2-2Ssum_a+S^2 \]

用二次函数的知识可知 \(sum_a \to S/2\) 时最小。

问题转化为选择合适的顺序使 \(sum_a\) 最接近 \(S/2\),这里令 \(sum_a\le sum_b\),观察数据范围,不难发现直接背包即可。

E

显然最多有 \(\sqrt{n}\)\(cnt\),于是暴力枚举 \(cnt\),贪心查找最值,\(map\) 查重最多 \(m\) 次,所以复杂度 \(O(n+m\log n)\)

F

显然塔只能放叶子上面,然后想肯定以最大值为根(这样能够使下部节点收益更多),然后向上合并。

主题:DP

A

\(O(n^2)\) DP 咩?

若两个人取钥匙的路径交叉则不优,因为珂以交换使得路径变短,所以每个人选择的一定是上一个人选择的与后一个人选择的中间一个,即满足选择夹中性。

将人与钥匙分别按位置排序,

\(f_{i, j}=\min \{ f_{i, j-1}, f_{i-1, j-1}+cost(i, j)\}\)

B

显然跑图是否连通

C

也是一脸 DP 样。。。

先排序,考虑设 \(f_i\) 表示前 i 个是否可行,显然 \(f_i\) 可以由 \([j+1, i-k+1]\) 转移,其中 \(j\) 是最后一个满足 \(a[i]-a[j]>d\) 的位置,不难得 \(j\) 珂以双指针,转移也可以用前缀和实现。

D

顺时针一直跑,能进就进,一个点最多多转 \(2n\) 次,所以最多 \(2nk\)

E

考虑正面数字向反面数字连边,不难发现每个数字都是 1 出度 1 入度,因此最后图就是几个简单环,每个环独立,只要分别算其贡献即可。

题目要求是选一个边集 \(V\) 保证端点 \(E\) 都被覆盖,由于是一个圆环,所以条件反过来没问题。

于是就变成了选一点集 \(E\),保证没有两个相邻的点都不属于这个点集。

考虑 DP,设 \(s_i\) 为环大小为 \(i\) 的总答案。

不难发现

\[s_i=f_{i, 0, 1}+f_{i, 1, 0}+f_{i, 1, 1} \]

其中 \(f_{i, 0/1, 0/1}\) 表示大小为 \(i\) 的环中,钦定 首/尾 选/不选。

则:

\[f[i][0][0]=f[i-1][0][1] \]

\[f[i][0][1]=f[i-1][0][0]+f[i-1][0][1] \]

\[f[i][1][0]=f[i-1][1][1] \]

\[f[i][1][1]=f[i-1][1][0]+f[i-1][1][1] \]

F

猜个结论:前 \(\frac{n}{2}\) 大的一定能被选到。

不妨设前 \(\frac{n}{2}\) 大的权值为 +1,剩下权值为 -1。

倘若要满足条件,则要满足换完后的序列取权值前缀和,所有权值为 +1 的位置的前缀和都要 \(\le 0\)(意思就是前面我取的不超过对手)。

又考虑到除了 +1 就是 -1,那么这个约束扩大到每一个位置都是可以的。

再对割换这个操作进行分析,由于相对位置没有关系,我们只关心最后每个值与 0 的关系,所以其相当于 \(sum_{(k, n]}\) 集体减 \(sum_k\),并使 \(sum_{[1, k]}\) 集体加上 \(sum_n-sum_k\)

注意到 \(sum_n\) 无论怎样均为 0,所以相当于整体减去 \(sum_k\)

要使最后序列前缀和 \(\le0\),只要找原来前缀和最大的位置就能保证。

G

类似于 F,设特殊牌权值位 \(w_i\),其他为 0。

满足的条件为前缀和 \(sum_i-i>0\)(注意 \(sum_0=1\),初始珂以自动摸一张)。

但这样子有个 \(i\),不妨让权值都减去 1,即特殊牌 \(w_i-1\),否则 -1,则条件转化为 \(sum_i>0\)

然后呢?然后就不会了。。。

pht 丢出了结论:Raney 引理:设整数序列 \(A=\{a_1,a_2,\cdots,a_n\}\),且部分和 \(S_k=a_1+\cdots+a_k\),序列中所有数字的和 \(S_n=1\),则在 \(A\)\(n\) 个循环表示中,有且仅有一个序列 \(B\),满足 \(B\) 的任意部分和 \(S_i\) 均大于零。

H

随机化是好的。

考虑这样一种暴力:枚举每个人的子集,然后暴力去匹配。

由于每个人有 \(\frac{1}{2}\) 的概率在最优队伍里面,所以我们枚举个 \(30-50\) 次就保证能踩中最优组合。(除非你脸黑

接下来考虑怎么匹配,把每个人对应的 15 位提出来, \(O(3^p)\) 枚举子集,我们只需要看多少个人是它的超集,高维前缀和即可。

复杂度 \(O(50(n+p2^p+3^p))\)

I

5.4 主题:树

A

最终留 \(2n\) 条边并保证原图连通,这个简单跑一边生成树就珂以了,直接遍历。

但注意是单向的,所以反向再跑一次,遍历到的 \(2*(n-1)\) 条边珂以保证图连通,剩下随便删。

B

有一个显然的东西:偶数结点珂以不连边(这不废话)

一条边会给总度数 +2,所以度数一定为偶?

那么最后一定得有偶数个 1 点,即若条件中有奇数个 1 且无 -1 珂以判负。

考虑直接从 -1 捞出一个点放入 1。

对于某两段 \(a-c, b-d\),若 \(a-c\)\(b-d\) 有重复部分,必然可以换成 \(a-b\)\(c-d\) 使得其没有交点。

所以直接生成树上每次遍历两个点,路径覆盖,奇数次的边保留就好。

C

整理题意:在切断水管数最小的前提下,让失去供水且没有怪兽的房最少。(真不人道

也就是说每次给出亿些关键结点,然后询问怎样割最少的边能让关键结点与根节点独立,且根节点所在的连通块最大。

不难发现就是不断求多点 LCA。

一个结论:在翻知乎看到的树上多个点的LCA,就是DFS序最小的和DFS序最大的这两个点的LCA。

感性证明正确。

但是要注意一个细节:1 上面没有边,因此要将其割裂成多棵树,但注意到每次只需要加/删一个点,所以相当于没割。

多个模组,动态加/删,询问全局最小/大值,从个人的角度出发来讲偏向于直接摁一手线段树(用 dfs 序标就珂以做到模组合并改成区间询问)。

复杂度 \(O(q\log n)\)


小声:其实特殊节点只在叶子上(

D

刚拿到题:这很虚树。

草,不对,这 tm 会换根。

算了,那就不管根,直接暴力 DP,设 \(f_{i, j}\) 为已经将前 i 个关键点分成 j 组的方案数,则

\[f_{i, j}=f_{i-1, j}\times (j-cnt(x_i))+f_{i-1, j-1} \]

其中 \(cnt_(x_i)\) 是指 \(x_i\) 到路径上有多少个异于自己的关键点。

怎么算这个 \(x_i\)?这不就相当于单点加,求路径和吗?树剖解决。

还有个问题?我们要保证 \(i\) 在新树中的所有父亲都在 \(i\) 前面被处理。

想到一个很妙的解决方法:如果 \(y\)\(x\) 的父亲,那么必有 \(cnt_y<cnt_x\),严格小于!

所以直接按 \(cnt\) 排序就行,复杂度 \(O(q+n\log^2 n)\)

E

根号分治,离线询问。

\(\ge \sqrt{n}\) 的,对于每一个集合,直接 bfs 迭代出树上每个点到该集合的最短路。

\(\le \sqrt{n}\) 的,点数总和 \(\le n\sqrt{n}\),直接上虚树

F

\(mod\) 很小,直接点分治。

亦珂以 Dsu on tree,或 线段树合并。

G

玩数据?

\(2^{20}=1048576\),只比 \(10^6\) 大一点点。

考虑重链剖分,注意到每个点只有 \(\log_2 n\) 条轻边,所以考虑这样构造:重儿子走同一层,轻儿子向下拓一层。

H

考虑没有删除怎么做。

\[dp_{i, S}=\min\{dp_{i-1, S \times a_i}, dp_{i-1,S}+b_i\} \]

不难发现复杂度 \(O(nsize)\)

对操作进行建树(删除回退,新增加儿子),类似于 G,轻儿子新开数组,重儿子沿用,复杂度 \(O(n\log n +nsize)\)

本质上类似于 Dsu on tree

I

直接暴力枚举直径端点,然后找 \(dist_{x, u} \le dist_{u, v}\)\(dist_{x, v} \le dist_{u, v}\),显然是一个类似于并集的东西,所以直接暴力 bitset,复杂度 \(O(\frac{n^3}{w})\)

5.14 主题:DP 斜率优化和 wqs 二分

A

察觉到我们每次只是对序列末尾操作。

建操作树,\(push\) 相当于在当前节点新加一个儿子,\(pop\) 回退到父亲。

最大值就是求到根路径上的最大值。

B

C

考虑由 b 向 a 连边(找 b 珂以直接单调栈),由于最后形成的珂能是多棵树,所以增加一个虚拟根,不难发现每次询问就是求两个点的 LCA。

D

假设我们选了两个 \(x, y\),用 \(d_i\) 表示到最后一个点的距离,按 \(d_i\) 从大到小排序。

\[cost(x, y)=\sum_{i=0}^{x-1}w_id_i+\sum_{i=x}^{y-1}w_i(d_i-d_x)+\sum_{i=y}^{n-1}w_i(d_i-d_y) \]

\[=\sum_{i=0}^{n-1}w_id_i-\sum_{i=x}^{y-1}w_id_x-\sum_{i=y}^{n-1}w_id_y \]

\(A=\sum_{i=0}^{n-1}w_id_i, S_i=\sum_{i=0}^{i}w_i\),则变为

\[=A-(S_y-S_x)d_x-(S_n-S_y)d_y \]

直接斜优即可。

E

斜优板子

F

树上斜优,上可持久化

G

wqs 二分(×)

Shy 二分 (√)

https://blog.csdn.net/a_forever_dream/article/details/105581221

显然有 \(dp_{i, j}\) 表示前 \(i\) 个点,分 \(j\) 段的最小代价

\[dp_{i, j}=\min{\{ dp_{i-1, j}, dp_{i-2, j-1}+(s_i-s_{i-1})\}} \]

\(O(n^2)\) 显然不行, 设 \(F_j=\min dp_{i, j}\)

\((i,F_i)\) 为一个决策点,由于 \(s_{i}-s_{i-1}\) 恒正,所以决策点形成下凸包。

考虑二分切线斜率为 \(k\),我们要尝试找到凸包中被切到的点,不难发现此时截距最小,现在问题转化为求对应 \(k\) 的最小截距 \(b\)

我们知道这条直线是 \(F_i=ki+b\),则 \(b=F_i-ki\),这相当于 DP 每次分区间的时候多减去一个 \(k\),这样便可以消去区间个数的影响。

H

wqs板子

I

考虑不加限制,1 的度数为 \(D1\),那么,在 1 的度数为 \([1, D1]\) 时,边权单调递减,在 \([D1, n-1]\) 时单调递增,是下凸包,那么直接 wqs 二分即可,注意斜率要从负无穷开始,关键边要先于非关键边。

但是!可能最后 \(k\) 周围斜率相同,即决策点 \((i, F_i), ... (k, F_k),...F(j, F_j)\) 的切线相同。这样子的话输出方案就不一定正确。方案构造看这里

J

设每个区间的末尾为 \(ed_i\)

把标准缩放到 \(|s_i-s_{i+1}|\ge \max(w_{ed_i}, w_{ed_i+1})\)

可以证明使得 \(\sum s_i^2\) 最小的方案一定合法。假设不合法,则存在相邻两段 \((s_1,m_1)\), \((s_2,m_2)\) 使得 \(s_1>s_2+\max\{m_1,m_2\}\)。将分割点向右边移动一步,能使得 \(s_1^2+s_2^2\) 严格变小,矛盾。

新的问题可以通过 wqs 优化 DP 在\(O(n\log C)\) 的时间内完成。

摘自 jiangly 的博客()

具体来说就是这样的:

考虑某两个相邻的合法区间的交集的两个数 \(a, b\),以及这两个区间和分别去掉 \(a, b\) 的和 \(Sa, Sb\)。令 \(Sa>Sb,a>b\)

则根据条件,有:

\[Sa+a-Sb-b\ge a \]

\[Sa\ge Sb+b \]

考虑将 \(a\) 丢到 \(Sb\) 里面,则有

\[(Sa+a)^2+(Sb+b)^2-(Sa^2+(Sb+a+b)^2)=2a(Sa-Sb-b) \ge 0 \]

那么 平方和 就变小了

5.28 主题:简单图论

A

查询每个连通块是否是完全图

B

考虑将高速边设成最短路初始值,对非高速边做最短路,若某一次 \(d_x+w >= d_y\),则标记 \(y\) 不需要,答案就是 \(k\) 减去所有未被标记且有高速路的点个数

C

考虑到非停站点没有任何意义,因此考虑以第 \(i\) 个停站点作为状态,又因为我们每次都要关心绿灯还剩多少时间,所以设已用 \(j\) 秒绿灯。

\(dp_{i, j}\) 为到第 i 个点,绿灯到 \(j\) 秒所用的最短时间,不难发现 dp 过程是一个最短路过程,dij 加速珂以做到 \(O(mT\log(mT))\),很紧。

考虑 如何卡掉这个 \(\log\),发现我们的状态与答案有重叠,所以重设\(dp_{i, j}\) 为到第 i 个点,绿灯到 \(j\) 秒所需要等的最少红绿灯轮次(包括当前),发现转移边权变为了 0/1,直接 bfs。

D

考虑类似于 P5304 的二进制分组,将国籍中 \(L\) 位为 1 的明星合成一个大汇点,跑最短路,用 \(dist\) 更新国籍 \(L\) 位不为 1 的和尚最小代价。

E

关键点:一条边经过两次只会改变中点奇偶性

显然若图珂以,那么树也珂以。

直接拍出一个 dfs 序,按顺序遍历,如果当前的 \(dfn_i\) 是 其最后一次出现且不满足奇偶性,那么对应措施是:往父亲位置走回去,再走下来(不往下走的原因是前面已经定死了,不能改1),如果是根,直接删掉即可。

F

感觉珂以直接暴力维护所有不平衡的点,直接跑拓扑,事实证明我对了(。

G

网络流鲨我

枚举要赢得是谁,那么每个人最多还能赢的场数 \(k_i\) 已经确定。

那么将人作为中间点,向虚拟汇点连一条容量为 \(k_i\) 的边。

对于没有进行的比赛,我们只需要往要比赛的两个点连一条容量为 \(1\) 的边,再用虚拟源点向比赛连一条容量也为 \(1\) 的边,这样就能保证两边只有一个能赢!

是个比较经典的构图方法。

H

见此

9.22 主题:杂题

A

考虑每个矩形 \(i:(a_i, b_i)\) 视为 \(a_i->b_i\) 的一条边,因为偏序关系为严格小于,我们把一个点被选择作为宽的时候视为这个点的出边,那么每个点最多只能有一条出边,然后每个点的贡献就是 下标*入度。

\(n\) 个点,\(n\) 条边,显然只有基环树/树的情况。

对于基环树,每个点的贡献是确定的,因为必然有一条出边。

对于树,只会有一个点不需要入边(根),选最大的即可。

B

暴力遍历所有的情况即可,注意如果走到了另一个题目给定的点的时候,其补集也要走一遍。

C

暴力分层图。然后爆栈

D

考虑 \(2\times n\) 的摆法,对于 \(n=2k+1\),可以构造让最左边的竖着摆的移到最右边,\(n=2k\) 则是将左右两个横着变为竖的。

画出图后,发现这样子每个骨牌要首尾对应,于是考虑某个骨牌 \((x_i, y_i)\)\(x_i\)\(y_i\) 的一条边,不难发现答案出现的形式很想欧拉序,构造即可。

E

sto qifan,什么神仙建图题。

考虑 \(i\)\((-A_i)\bmod M\) 连 0 边,\(B_i\)\(i\) 连 0 边,\(x\)\((x+1) \bmod M\) 1 边,然后做完了。

正确性显然,不过我想不到而已。。。

F

G

直接二分加暴力 bitset 优化矩乘肯定是不行的。思考我们这样做的劣势在哪里:我们把每个点分开考虑了。

重设 \(dis_{L}(i, j)\)\(i\) 经过 \(L\) 条边到 \(j\),编号最大的边,其中 “编号” 是指这个边的出现时间。

这样子就变成了 max min 的矩乘,只用做一次即可。

H

前置(P6845) 双倍经验:CF1192B

削弱版 CF1092E

显然最后肯定是最大的直径中点连向其他直径的中点,于是直接看最长的三个直径即可。

I

先考虑暴力更新所有的 \(d(u, v)=\min(d'(u, v), g_u+g_v+x)\) \(g_i\) 离是 \(i\) 最近的叶子的距离,可以反向拓扑得到。

\(min\) 很痛苦,我们把内部的值放到下标试试?

考虑一个机器牛马的暴力 DP,设 \(f_{u, i}\)\(u\) 子树中 \(f_v=i\)\(\max(dep_v)\),不难发现这玩意递减

于是我们可以酱紫暴力合并子树:

\(f_{u, x}=\max_{(u, v) \in T}(f_{v, x})\)

等等,答案怎么算?

考虑设初始答案为 \(ans=0\),考虑什么时候 \(ans\) 会更新:

\(g_{v1}+g_{v2}\ge dep[v1]+dep[v2]-2dep[u] \ge ans\)

考虑枚举 \(g_{v1}\),即 \(f_{u, x}\) 中的 \(x\),不难发现 \(f_{v, y}\) 是单调的,取最后的即可,由于 \(x\) 跟深度有关,于是长剖优化即可。

10.21 主题:math

A

对于连续的乘方,区间长度不会超过 20,暴力统计即可。

B

分成 \(2n\) 个小区间,分别统计每个区间的贡献,设 \(f_{i, j, 0/1}\) 为当前区间是否在答案区间的方案数,发现转移式子可以矩乘优化即可。

C

乘法分配律一下,维护 Fibonacci 后面的幂次矩阵。

D

\(c[i]=A[i]-B[i]\),我们只用考虑 \(c[i]\) 是否全为 0 即可。

考虑二阶差分:\(d[i]=c[i]-c[i-1]-c[i-2]\),不难发现上面的条件变成 \(d[i]=0\),此时原来的区间加递推数列被转换成了单点加,暴力即可。

E

random 一个 \(1 \times n\) 的矩阵 \(R\),则 \(A*B*R=C*R\)\(A*B=C\) 的一个必要条件,多随几组即可。

F

炸脖龙 I 弱化。

G

推完式子后 BSGS。

posted @ 2022-05-01 14:47  127_127_127  阅读(67)  评论(0编辑  收藏  举报