2024 暑假集训

树状数组&线段树

线段树合并,主席树等知识点是第一次接触。

同时对扫描线能解决的问题有了些更好的认知。

毕竟是之前学过的东西,还是比较好的。

掌握程度:\(85\%^+\)

离线分治算法

具体是:

  • 线段树分治 \(80\%^+\)

    就是个线段树上二分。

  • CDQ 分治 基于时间的分治 \(75\%^+\)

    基本原理主要是二分,这类问题主要是思维问题,搞定需要怎么合并与维护。

  • 整体二分 \(70\%^+\)

    基于值域的离线分治算法:避免多次二分,仅一次二分完成多组询问。

也是扫盲课讲过的。

DP

怎么说……

大部分是需要线段树 or 树状数组优化的。

有些转移方程并不是很好想。

掌握程度:\(50\%^+\)

图论

具体是:

  • 分层图最短路 \(95\%^+\)

    就是个最短路但是多了几个点 or 边。

  • 差分约束 \(90\%^+\)

    利用最短路中的松弛操作与不等式的相似性,通过最短路构造出一组特殊解。

  • 最小生成树 \(80\%^+\)

    Kruskal,Prim之前就会,在此基础上学习了 Brovka 算法,但是大部分时间是在讲题。

  • 强连通分量 \(80\%^+\)

    主要是 Tarjan 缩点。

  • 2-sat \(70\%^+\)

    问题形如有 \(n\)\(0/1\) 变量 \(x_1, x_2, . . . , x_n\),不同的变量有一些限制,形如 \(x_i\) 选 了 \(a\) 或者 \(x_j\)\(b\)。求出一种合法方案(或判断无解)。

    我们可以对每个变量建立两个点,分别表示 \(0\) 点和 \(1\) 点,那么一对关系可以转化为两条表示选了起点就必须选终点的边。

    是否有解:如果一个点 \(0,1\) 两点必须同时选,显然就是无解的。可以发现这个条件两点位于同一强连通分量中。

    求方案:每次找到 \(SCC\) 编号小的选择即可。

  • 二分图 \(50\%^+\)

    • 匹配:图的一个匹配是一个边集,满足一个点最多作为一条边的端点出现。
    • 点覆盖:图的点覆盖是一个点集,满足每条边至少一个端点处于点集中。
    • 边覆盖:图的点覆盖是一个边集,满足每个点至少一个连边处于边集中。
    • 独立集:图的独立集是一个点集,满足所有点对之间没有一条边直接相连。
  • 点/边双连通分量 \(80\%^+\)

    差分求解。

  • 割边与割点 \(80\%^+\)

    还是差分求解。

  • 圆方树 \(50\%^+\)

    • 以点双为基础建立的树。对图中的每个点双建一个方点,图中原来存在的点是 圆点。对于一个点双,它的方点要向它包含的点对应的圆点连边。

    • 性质:

      • 每条边一定是连接一个圆点和一个方点。
      • 一个割点在圆方树上一定至少 \(2\) 个连边,非割点最多只有 \(1\) 个连边。
      • 一对点在树上路径中的圆点就是它们之间必须经过的割点。
  • 欧拉回路/路径 \(60\%^+\)

    • 一个图的欧拉路径为一条经过所有边恰好一次的路径。
    • 一个图的欧拉回路为一条起点终点相同的欧拉路径。
      • 先回溯再找环,开一个栈,当一个点要回溯的时候把它压入栈中,最后栈的倒叙就是答案。
      • 无向图欧拉路径存在的充要条件是恰好两个点度数奇数,说明这两个点分别是起点和终点。
      • 有向图欧拉路径存在的充要条件是每个点入度等于出度,其余和无向图相同。
      • 有向图欧拉回路存在的充要条件恰好一个点出度多一,一个点入度多一,以它们分别为起点和终点
  • 网络流

    • 最大流 \(80\%^+\)

      • EK 算法

      • Dinic 算法

      • 最大流 = 最小割

      • 最大闭合权子图:

        结论是我们如果额外建立源汇 \(S,T\),把正点权由 \(S\) 连接其点权容量的边,负点权连接 \(T\) 一条容量为点权相反数的边,原图的边保留且容量为 \(+∞\)

        最大点权和为:总正点权 − 最小割

    • 费用流 \(60\%^+\)

      • 解决方法是在每次寻找一条费用最小的路径进行增广,知道增广不了为止,可在 dinic 上直接修改 BFS 为 SPFA。

      • 费用流还有额外的性质:具有凸性。

    • 有/无源汇上下界可行流 \(40\%^+\)

      • 无源汇考虑如何处理一条边上下界 \([l, r]\),假设我们让这条边强行拥有 \(l\) 的流量, 然后设置上下界为 \([0, r − l]\) 就是常规问题。

        但困难在于这样做会导致流量不平衡,我们令 \(din\) 表示一个点的入流量,\(dout\) 表示出流量,\(d = din − dout\),再建立一个超级源点 \(S\) 和汇点 \(T\)

        • \(d > 0\) 的由 \(S\) 连边,容量为 \(d\)
        • \(d < 0\) 的连向 \(T\),容量为 \(−d\)

        跑最大流,若流量全部拉满则存在一组解,即每条边的流量 \(+l\),否则无解。

      • 有源汇给汇到源连一条 \(+∞\) 的边即可转化为无源汇。

    • 其他流

字符串

具体是:

  • 哈希 \(95\%^+\)

    好用的哈希模数:

    • \(2654435769\)
    • \(1610612741\)
    • \(998244353\)\(10^9+7\)
  • KMP \(90\%^+\)

    重在理解 nxt 数组

  • Trie 与 AC 自动机 \(60\%^+\)

    重在理解 fail 指针

  • Manacher \(75\%^+\)

    当前处理到的中心点被这个之前的回文串覆盖,就可以继承很多信息。

树上问题

具体是:

  • LCA \(95\%^+\)

    • 倍增
    • 重链剖分
    • LCT
    • 倍增求 RMQ
  • 树的直径 \(95\%^+\)

    • 两次 DFS
    • dp
  • 树的重心 \(95\%^+\)

    使得删去这个点后,剩余子树大小最大值最小的点被称为树的重心。

    • 重心的数量最多有两个,如果有两个,则它们相邻。

    • 删掉重心后,所有子树大小不超过整棵树的一半。

    • 所有点到某个点的距离和中,到重心的距离之和最小,如果有两个重心那么和相同。

    • 在删除或加入一个叶子,最多只会引起重心移动一条边。

    求法也很简单,对于每个点求出所有子树大小(别忘了上面那个子树)后按照定义求解即可。

  • 树哈希 \(50\%^+\)

    重在构造 f 函数和 g 函数。

  • 重链剖分 \(65\%^+\)

    • 用了 DFS 序,可以用线段树做树上操作。

    • 感性理解,好写,常数小。

    • 树剖还可以一定程度上支持换根。

  • dsu on tree \(50\%^+\)

    启发式合并。

    zyf原话:

    树上启发式合并就是启发式合并上树。

    是一种通过改变遍历树的顺序来降低某些算法复杂度的技巧。

    这种方法可以让很多看起来很暴力的做法复杂度变的很优秀。

  • 树分治

    • 点分治 \(75\%^+\)

      从重心开始,每次删掉根节点并统计答案。

    • 点分树 \(60\%^+\)

      就是记录点分治的过程。

  • 虚树 \(50\%^+\)

    只保留若干关键点及其做 dp 需要的必要点,把一棵树的点浓缩为 \(O(k)\) 级别。

    接下来给出一种极其方便的求虚树的方法:

    • 把点按照 dfs 序排序
    • 把相邻的两点 lca 均加入点集
    • 去重

    最后我们按照原树的祖先后代关系建树即可。

数论

专业对口了属于是

具体是:

  • 欧几里得算法 \(95\%^+\)

  • 费马小定理 欧拉定理 裴蜀定理 Lucas 定理 \(100\%\)

  • 扩展欧几里得算法 \(90\%^+\)

  • 乘法逆元 \(90\%^+\)

    • \(p\) 为质数:费马小定理
    • 否则:扩展欧几里得算法
  • 扩展欧拉定理 \(100\%\)

  • 中国剩余定理—CRT \(100\%\) 拓中—exCRT \(90\%^+\)

    感觉代码并不是很好写

  • BSGS 与 exBSGS 原根优化 exBSGS \(85\%^+\)

    思路会了,但是……

  • 阶与原根 \(85\%^+\)

    之前数学老师让看了,结果居然在信竞用上了

  • 积性函数与狄利克雷卷积 \(85\%^+\)

    很好理解

  • 前置:数论分块 \(90\%^+\)

  • 筛(主要筛积性函数)

    • 埃氏筛 \(90\%^+\)

    • 欧拉筛 \(90\%+\)

    • 亚线性杜教筛 \(80\%^+\)

      just 会思路,代码没实现过……

  • 莫比乌斯反演 \(80\%^+\)

组合容斥计数

具体是:

  • 小球模型(四大类,其实就是 dp): \(80\%^+\)

    • 球和盒子没有区别:规定盒子中的小球个数是不增 确实是 dp

    • 球没有区别盒子有区别:插板法

    • 球有区别盒子没区别:第二类斯特林数

    • 二者均有区别

      • 可以为空:染色

      • 否则:递推

  • 广义容斥

    • 子集容斥(参考莫反找到一个单位元) \(75\%^+\)

    • 莫反也是广义容斥 \(80\%^+\)

    • min max 容斥也可以算一种广义容斥 \(75\%^+\)

  • 卡特兰数与格路计数:容斥 \(75\%^+\)

概率期望

具体是:

  • 经典模型 \(80\%^+\)
  • 后头貌似都是题

引用一下 lyc 的话:

如前面所说,一些期望 dp 不过就是普通计数 dp 套了一层概率期望的壳。

这类题太过无趣,讲它们几乎和普通的 dp 选讲无异,不能突出概率期望题的独特之处。

这里选的题目其中一部分也许能体现概率期望题目方面的独特思维。

总结

很多都是会思路但是没有代码实现过。\(QwQ\)

寄……

posted @ 2024-07-24 10:53  whrwlx  阅读(29)  评论(0编辑  收藏  举报