zoukankan      html  css  js  c++  java
  • 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 imes inom{m}{i} imes (m - i)^n ]

      • 性质: 枚举非空盒.

        [m^n = sum_{i = 0}^m inom{m}{i} imes i! imes 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 模板敲一遍. 敲完之后可以回想一些常用的式子和性质, 比如斯特林数, 斐波那契数列, 错排, 不相邻组合, 可重组合, 矩阵树定理什么的.

  • 相关阅读:
    正则匹配
    curator.zookeeper
    linux tail 命令查看日志 并加上颜色
    k8s一些命令
    k8s文件传递及scp
    Linux下如何在不解压jar包查看或修改配置文件
    MySQL教程之concat以及group_concat的用法
    JavaCV读取流设置超时
    学习html5 canvas 圆环
    jquery使用$.each()
  • 原文地址:https://www.cnblogs.com/BruceW/p/13935993.html
Copyright © 2011-2022 走看看