摘要: cdq 分治 适用范围 cdq 分治是一种用来解决特殊点对的数量或找到一对点对使得函数值最大的问题。 流程 首先找到序列中点 \(mid\),再将此区间分为三类: \(l \leq i \leq mid,l \leq j \leq r\); \(l \leq i \leq mid,mid+1 \le 阅读全文
posted @ 2023-05-25 17:36 Symbolize 阅读(26) 评论(0) 推荐(1)
摘要: 概念 首先要明确以下几个点: 重儿子:对于每一个非叶子节点,它的所有儿子中,以此儿子为根的子树的节点个数最多的儿子为重儿子。 轻儿子:除重儿子以外的儿子。 重边:重儿子与父节点连成的边。 重链:连续的重边组成的链。 例图: 图中的菱形节点为重儿子,粗边为重边。 接着我们就能发现每个轻儿子都有一条以它 阅读全文
posted @ 2023-05-09 17:32 Symbolize 阅读(32) 评论(0) 推荐(1)
摘要: 缩点 本质上来说就是在有向边找强连通分量缩点。 提前说明下变量: \(dfn_i\):代表编号为 \(i\) 的点的 DFS 序序号。 \(low_i\):代表编号为 \(i\) 的点所在的强连通分量中所有点中的最小dfn值。 \(kase\):时间戳。 \(id_i\):缩点之后重新给点编号。 \ 阅读全文
posted @ 2023-05-09 17:20 Symbolize 阅读(33) 评论(0) 推荐(1)
摘要: 试用范围 形似:\(f_i=\min\limits_{j=1}^{i} a_ib_j + c_j + d_i\) 或 \(\max\limits_{j=1}^{i}a_ib_j + c_j + d_i\) 的状态转移方程(\(b\) 单调递增),因为此时在 \(a_i \times b_j\) 中 阅读全文
posted @ 2023-03-25 16:20 Symbolize 阅读(24) 评论(0) 推荐(1)
摘要: 对拍模板(P1001 A+B Problem) Part 1 随机造数据的代码(\(data\))。 #include<bits/stdc++.h> const int mod=1e6; using namespace std; int main() { freopen("data.in","w", 阅读全文
posted @ 2023-03-01 19:24 Symbolize 阅读(31) 评论(0) 推荐(0)