暑假集训题目合集-2
Day7
扫描线
一般使用线段树维护,具体地,维护区间和及区间非零个数。 ### [NOI2023] 方格染色 横竖线就是扫描线板题。斜线最多只有 \(5\) 个,暴力将能够合并的斜线合并,然后遍历所有横竖线判断是否有交。懒得写离散化了,直接动态开点线段树也能过。code
1 |
|
Day8
树上技巧
树的直径的求法:
- 两遍 dfs/bfs(无法处理负边权) - 树形 DP(可以处理负边权)
树形 DP 具体求法:
设 \(dp_{u,0/1}\) 表示以 \(u\) 为根的子树中从根向下能延伸的最长/非严格次长路径。则答案为 \(dp_{u,0}+dp_{u,1}\) 的最大值。 ### [APIO2010] 巡逻 老题了。考虑贪心,\(k=1\) 时连接直径两端是显然的。设直径为 \((u_1,v_1)\),加入的第二条边为 \((u_2,v_2)\),二者不交时答案显然为 \(dis(u_1,v_1)+dis(u_2,v_2)\),若两路径有交,形如

code
1 |
|
[NOI2021] 轻重边
结论:每次修改操作染不同颜色,重边数等于区间内相邻两点颜色相同的点对数。树剖+线段树维护即可。精细处理树剖的查询部分。code
1 |
|
[十二省联考 2019] 春节十二响
贪心策略:令两条链上各自权值最大的比较,次大的比较……则可以在每个节点开一个堆,启发式合并。不同于可并堆,节点 \(u\),\(v\) 的堆合并后的大小为 \(\max(size_u,size_v)\) 而非 \(size_u+size_v\),时间复杂度为 \(O(n\log n)\)。code
1 |
|
Day9
数论
「TAOI-2」喵了个喵 Ⅳ
神秘题。\(n\) 为偶数时显然。\(n\) 为奇数时先求出所有数的最大公约数 \(d\),此时取 \(x=2\),将所有数都约去 \(d\),此时若有奇数个奇数,则会有偶数个偶数,必然无解,反之则可以按照奇偶容易地构造一组解。最后答案为 \(2d\)。code
1 |
|
[CTSC2017] 吉夫特
这题的转化真是神了。发现题目中 \(\bmod 2\) 很特殊,\(\dbinom{a_{b_1}}{a_{b_2}} \times \dbinom{a_{b_2}}{a_{b_3}} \times \cdots \times \dbinom{a_{b_{k-1}}}{a_{b_k}} \bmod 2 >0\) 成立当且仅当对于任意 \(k>1\),\(\dbinom{a_{b_{k-1}}}{a_{b_k}}\bmod 2=1\),我们尝试使用 Lucas 定理展开\[\binom{a_{b_{k-1}}}{a_{b_k}}\equiv \binom{\lfloor a_{b_{k-1}}/2\rfloor}{\lfloor a_{b_k}/2\rfloor}\binom{a_{b_{k-1}}\bmod 2}{a_{b_k}\bmod 2}\pmod 2\] 持续展开,不难发现其等于两数二进制拆分后每一位的组合数相乘,又因为
\[\binom{1}{1}=\binom{1}{0}=\binom{0}{0}=1\] \[\binom{0}{1}=0\] 所以 \(\dbinom{a_{b_{k-1}}}{a_{b_k}}\bmod 2=1\) 当且仅当 \(a_{b_k}\) 在二进制下是 \(a_{b_{k-1}}\) 的子集,即 \(a_{b_{k-1}} \operatorname{bitand} a_{b_k}=a_{b_k}\)。则我们可以推出 DP 方程,设 \(dp_{i}\) 表示以 \(i\) 为结尾的子序列方案数:
\[dp_{a_i}=\sum_{a_i\in a_j\land j<i}(dp_{a_j}+1)\] \(O(3^{\log{\max(a_i)}})\) 子集枚举即可。
code
1 |
|
Day10
线性代数
[USACO07NOV] Cow Relays G
我们使用 \(\min\) 和 \(+\) 代替原矩阵乘法中的 \(+\) 和 \(\times\),也就是\[C_{i,j}=\min(A_{i,k}+B_{k,j})\] 设 \(A_{i,j}\) 表示 \(i\) 到 \(j\) 的最短路,则走 \(n\) 步后的最短路即为 \(A_{i,j}^n\)。
设离散化后点有 \(m\) 个,时间复杂度 \(O(m^3\log n)\)。
code
1 |
|
【模板】矩阵求逆
本题中的矩阵均为方阵。矩阵的逆:在模 \(p\) 意义下,若 \(B\times A=A\times B=I\),则 \(B\) 称为模 \(p\) 意义下 \(A\) 的逆矩阵,记作 \(A^{-1}\)。模 \(p\) 意义下,一个矩阵若有逆矩阵,则必然只有一个逆矩阵。
矩阵的逆可以用高斯-约旦消元求出。原理:使用初等行变换将矩阵 \(A\) 转化为单位矩阵 \(I\),同时对一个初始的单位矩阵 \(I\) 进行相同的初等行变换,最终得到的就是逆矩阵 \(A^{-1}\)。
例如,我们构造原矩阵 \([A\mid I]\),进行一系列初等行变换后,得到 \([I\mid A^{-1}]\)。我们发现,高斯-约旦消元的过程就是将矩阵的左半部分变为单位矩阵的过程,非常适合求解矩阵的逆。
无解判断:若消元过程中,主元与 \(p\) 不互质则无解。
code
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 headless-piston's Blog!
评论