CSP-S 2020 考前总结

知识点

新学知识点

  1. 第二类斯特林数: 把 \(n\) 个不同的球放在 \(m\) 个相同的非空盒子的方案数

    • 递推式: 枚举最后一个球是单独开一个盒子还是放在之前的盒子里.

      \[S(n, m) = S(n - 1, m - 1) + mS(n - 1,m) \]

    • 计算式: 容斥, 钦定空盒.

      \[S(n,m) = \frac{1}{m!} \sum_{i=0}^m(-1)^i \times \binom{m}{i} \times (m - i)^n \]

    • 性质: 枚举非空盒.

      \[m^n = \sum_{i = 0}^m \binom{m}{i} \times i! \times S(n, i) \]

  2. Johnson算法 (最短路)

    总思路: 先求出一个虚拟节点到所有点的最短路, 然后把负边权变为非负数, 然后就可以用 Dijkstra 了.

    对于边 \((u,v)\), 设其权值为 \(w\). 假设预先求出的最短路为 \(d[u]\), 那么根据三角形不等式, 则有

    \[d[v] - d[u] \le w \]

    所以

    \[w + d[u] - d[v] \ge 0 \]

    所以把 \(w\) 加上 \(d[u] - d[v]\) 就可以保证它非负了.

    在求路径的过程中, 路径中间的 \(d[u]\) 会被抵消掉, 最后再 \(-d[s] + d[t]\) 就好了 (\(s,t\) 分别为路径起点和终点).

  3. 二维数点 (CDQ分治)

  4. 树形背包泛化物品优化

    大概就是对于根节点可以直接把子树抛弃的背包, 可以直接在 \(dfs\) 序上做. (没有进一步去了解过, 只是联考的时候碰到过一次.)

  5. 高斯消元 (求行列式): 就是直观解方程, 求行列式的时候要注意: 化成上三角矩阵时为了保证对角线有值, 需交换行.

  6. 矩阵树定理:

    只学了无向图的.

    \[L(G) = D(G) - A(G) \]

    \(D(G)\) 为度数矩阵, \(A(G)\) 为邻接矩阵.

    答案就是 \(L(G)\) 任意 \(n - 1\) 阶主子式的值. (就是把 \(L(G)\) 删掉任意一行一列然后求行列式的值).

  7. kosaraju算法 (求SCC个数):
    先对原图跑逆反序 \(dfs\) (就是 \(dfs\) 是记录出栈顺序), 然后按照出栈顺序从后往前对反图进行 \(dfs\), \(dfs\) 次数就是原图 \(SCC\) 个数. (先跑反图再跑原图也是对的.)

  8. 虚树: 按 \(dfs\) 序排序, 开个栈, 弹出 \(dfs\) 序比自己小且不是自己祖先的点. (注意一个点只有当它被弹出时才要连边).

  9. 多项式(部分)全家桶: 求逆, ln, exp, 快速幂, 牛顿迭代, 卡常 (注意事项: FFT 是循环卷积.)

小技巧

二维数点

  1. 静态二维数点: 扫描线 + 树状数组
  2. 动态二维数点
    1. 强制在线: 树套树 (线段树套线段树)
    2. 离线:
      1. CDQ分治
      2. 离线树状数组套树状数组

涉及到区间范围的题目可以考虑转化为二维数点.

颜色统计

  1. 区间颜色统计: 对每一位维护一个 \(nxt\), 指向下一个与它颜色相同的点. 对于区间 \([l,r]\), 我们只需统计 \(i \in [l,r]\)\(nxt[i] > r\) 的点, 转化为二维数点即可.
  2. 子树颜色统计: 按照 \(dfs\) 序维护 \(nxt\), 并利用树上差分, 在 \(i\) 处 +1, 在 \(lca(i, nxt[i])\) 处 -1, 统计子树 \(sum\) 即可.

"最值连通性"问题

自己随便起的名字.

就是说某个范围内, 所有点的 a 都大于/小于某个值时图连通, 就考虑 \(kruskal\) 重构树.

考试策略

  1. 对于细节比较多的贪心 / DP题, 一定要静下心来想, 最好写下来, 理清思路, 并适时放弃. 千万不要刚题.

  2. 看到数据结构题, 如果 5 min 内没想出比较合适且不会很难写的方案, 就先把暴力敲了, 然后看其他题, 正解留到最后. (计算几何题同理)

  3. 写题前一定要理清思路, 确保做法的正确性, 避免 1h 后才发现做法是假的的情况.

  4. 注意数据范围, 在开始思考前先确定题目的数据范围, 会对考虑的方向有影响.

  5. 能对拍尽量对拍, 如果暴力不好写, 也要测试一下极限数据. 重视静态查错的作用 (特别对于简单题).

  6. 对与题目无关的突发情况尽量无视. 与题目有关的突发情况, 如: 题目出锅, 做法假了. 一定要保持冷静, 仔细思考, 若真的假了就果断放弃, 看情况是否打部分分, 然后去看其他题目.

  7. 进考场后, 如果能碰键盘了, 就先把配置敲了, 如果还有时间, 就把快读和对拍需要的 data, cmp 模板敲一遍. 敲完之后可以回想一些常用的式子和性质, 比如斯特林数, 斐波那契数列, 错排, 不相邻组合, 可重组合, 矩阵树定理什么的.

posted @ 2020-11-06 11:29  BruceW  阅读(145)  评论(0编辑  收藏  举报