09 2024 档案

摘要:定义 是指将一棵树划分成若干条链。常见的剖分方式有长链剖分、重链剖分、实链剖分。 重链剖分 从轻重儿子的角度将树划分成多条“重链”,进而将重链转换成区间问题解决。 步骤 dfs 预处理一棵树的深度、父节点、子树大小、重儿子(\(dep, fa, sz, son\))。 对于每个轻儿子,再次 dfs, 阅读全文
posted @ 2024-09-09 21:34 endswitch 阅读(56) 评论(0) 推荐(0)
摘要:动态开点 当正常堆式建树开不下时(\(n\) 或 \(V\) 过大),通常使用动态开点。 例题 P2781 传教 算是很板了吧? 每次修改的时候,若当前访问节点未建立则新建节点并回溯至上一个节点记录左右儿子。实测写 & 引用或 struct 是很方便的。 要十分注意的是在 work 函数(单点修改 阅读全文
posted @ 2024-09-06 22:32 endswitch 阅读(137) 评论(0) 推荐(0)
摘要:并查集 普通并查集 路径压缩写法: struct Union_Find_Set { int f[N]; inline void init() { for(int i = 1 ; i <= n ; ++ i) f[i] = i; } inline int find(int x) { if(x != f 阅读全文
posted @ 2024-09-04 23:14 endswitch 阅读(37) 评论(0) 推荐(0)
摘要:问题模型 给定 \(a,b\) 两个长度为 \(n\) 的序列,求下列式子最大值: \[\frac{\sum_{i = 1} ^ {n} a_i · x_i}{\sum_{i = 1} ^ {n} b_i · x_i} \]其中 \(\forall i \in [1, n], x_i \in \le 阅读全文
posted @ 2024-09-02 22:50 endswitch 阅读(56) 评论(0) 推荐(0)