09 2021 档案

摘要:并不知道算不算动态DP. 对树进行树链剖分. 令 f[x] 表示 x 子树的答案. 令 g[x] 表示虚儿子答案之和. 然后有 f[x]=min(v[x],g[x]+f[k]), 其中 k 阅读全文
posted @ 2021-09-30 21:08 guangheli 阅读(9) 评论(0) 推荐(0) 编辑
摘要:圆方树 图的路径信息是很难处理的,因为有环. 如果我们需要处理的路径信息有特殊性质,可以考虑使用圆方树. 在圆方树中,定义方点和圆点. 其中,圆点就是原图中存在的点,编号为 1 ~ n. 方点是我们加进去的,且一个点双联通分量对应一个方点. 这里给出具体建立圆点方点的代码: 阅读全文
posted @ 2021-09-27 10:35 guangheli 阅读(58) 评论(0) 推荐(0) 编辑
摘要:根号数据结构 在以前,我十分讨厌带根号的数据结构,认为不够优雅. 但是在很多时候,带 log 数据结构的作用比较局限,且复杂. 这个时候,根号数据结构的作用是十分巨大的. 根号数据结构主要依赖于复杂度的分析,即将看似暴力的做法捏合在一起. 普通莫队 最简单的莫队. 可以处理只有 阅读全文
posted @ 2021-09-23 22:22 guangheli 阅读(188) 评论(0) 推荐(0) 编辑
摘要:数位DP 与数位有关的 DP. 一般来说,无脑记忆化搜索就完事了. 直接递推不仅细节繁琐,而且还不好想. 记忆化搜索的时候要记录:1. 当前数位. 2. 是否顶着上界. 3. 是否有前导零. 4. 计数器(为了满足题目中的条件) luoguP4317 花神的数论题 非常经典的数位 DP. 注意如果想 阅读全文
posted @ 2021-09-23 14:14 guangheli 阅读(43) 评论(0) 推荐(0) 编辑
摘要:看上去是一个需要支持换根的数据结构. 用 LCT 来做肯定是可以的. 但是需要对每一个点的虚儿子们开一个 set, 然后维护子树信息,相对麻烦. 不妨用树链剖分来做: 假设当前根为 root, 要查询的点为 x. 阅读全文
posted @ 2021-09-23 13:52 guangheli 阅读(21) 评论(0) 推荐(0) 编辑
摘要:把原始的图进行缩点, 形成边双树,然后把询问和加边的关键点加入,建成虚树. 在虚树上连新加入的边,再跑一遍边双算法. 最后只需查询任意两点是否都在一个联通分量里就行. 细节比较繁琐,然后虚树和点双都要注意对变量的清空. 更简单的做法是用 LCT 来做. 具体做法就是先将初始图的 阅读全文
posted @ 2021-09-21 19:57 guangheli 阅读(22) 评论(0) 推荐(0) 编辑
摘要:直接做没什么思路,那就考虑根号算法 令 s[k] 的长度为 len. 如果 len 的长度大于根号 n, 则这样的 s[k] 很少. 可以直接枚举长度大于根号的串,然后和其他所有串去匹配. 阅读全文
posted @ 2021-09-20 06:56 guangheli 阅读(26) 评论(0) 推荐(0) 编辑
摘要:Codeforces Round #720 (Div. 2) 来源:https://codeforces.com/contest/1521 A.Nastia and Nearly Good Numbers 若 B=1, 则不合法. 否则直接构建 $\mathrm{A, A \t 阅读全文
posted @ 2021-09-17 17:34 guangheli 阅读(41) 评论(0) 推荐(0) 编辑
摘要:Codeforces Round #721 (Div. 2) 来源:https://codeforces.com/contest/1527 A. And Then There Were K 不妨打一个表看看有没有什么规律. 发现每个数字 x 的答案是 x 阅读全文
posted @ 2021-09-17 02:16 guangheli 阅读(44) 评论(0) 推荐(0) 编辑
摘要:强连通分量 在无向图中取一个 DFS 树, 若出现返祖边,则出现了 "环",环中的点可互达. tarjan 算法中的 low[x] 就是环上深度最浅的点. low[x] 有两种求法: 1. 子孙的 x 可以更新 阅读全文
posted @ 2021-09-15 09:19 guangheli 阅读(71) 评论(0) 推荐(0) 编辑
摘要:同余最短路 一堆点凑成了 sum, 则 sum 可以表示成 k×a[1]+i 的形式. 即 k 为商,后面的 imod $\mathrm{a[1 阅读全文
posted @ 2021-09-15 07:54 guangheli 阅读(36) 评论(0) 推荐(0) 编辑
摘要:方法一: f[x] 表示所有物品凑成体积为 x 的方案数. g[x][j] 表示不用 x 物品组成体积为 j 的方案数. 然后 g 数组可以用 $\mathrm{f,g 阅读全文
posted @ 2021-09-15 06:01 guangheli 阅读(21) 评论(0) 推荐(0) 编辑
摘要:前置知识:洛谷P4198 楼房重建 在本题中,需统计 s[i]>maxj=1i1s[j]i 的个数. 1.mx[i] 为区间最大值 2.cnt[i] 为在考虑区间 $[\mathrm{l}, 阅读全文
posted @ 2021-09-14 08:59 guangheli 阅读(22) 评论(0) 推荐(0) 编辑
摘要:做法一: 线段树合并. 令 dp[x][i] 表示以 x 节点为根的子树全部被覆盖且延伸到了深度为 i 的祖先. 考虑 x,y 两个子树如何合并: 有 $\mathrm{dp'[x][i]=dp 阅读全文
posted @ 2021-09-14 08:01 guangheli 阅读(42) 评论(0) 推荐(0) 编辑
摘要:KMP 给定串 st,求 ts 中所有出现位置. 这个问题显然可以用 SAM/AC 自动机处理,但 KMP 的处理更简单一些. 定义串 $ 阅读全文
posted @ 2021-09-13 09:43 guangheli 阅读(30) 评论(0) 推荐(0) 编辑
摘要:虚树 在处理一些树上的询问时,总询问点数为 O(n), 但询问次数可能很多, 这时就需要虚树. 虚树的思想是尽可能用少的节点将询问点数串联起来. 对于询问点,虚树建立后只包含询问点之间的 lca 以及询问点本身. 虚树的构建 先对所有询问点按照 dfs 阅读全文
posted @ 2021-09-11 09:01 guangheli 阅读(67) 评论(0) 推荐(0) 编辑
摘要:segment tree beats 1.线段树维护历史最值 例题:洛谷P4314 CPU监控 令 (x,y) 标记表示将线段树当前区间所有数字变成 max(a[i]+x,y) 通过 (x,y) 标记可以实现区间赋值,区间加法,以及 $\mathrm{max(a[i] 阅读全文
posted @ 2021-09-09 01:59 guangheli 阅读(116) 评论(0) 推荐(0) 编辑
摘要:dsu on tree 在处理子树询问时,子树与子树之间总是相互干扰. 常用的处理手法有线段树合并,dfs 序等来规避子树之间的干扰. dsu on tree 则是利用的树链剖分轻重链的思想在多一个 O(logn) 的复杂度下避开子树之间干扰 算法模板: void dfs2(int x, i 阅读全文
posted @ 2021-09-07 19:07 guangheli 阅读(95) 评论(0) 推荐(1) 编辑
摘要:Educational Codeforces Round 82 (Rated for Div. 2) 来源:https://codeforces.com/contest/1303 A.Erasing Zeroes 找左右两端的 1,然后统计中间 0 的个数即可. #include <cstdio> 阅读全文
posted @ 2021-09-07 17:42 guangheli 阅读(34) 评论(0) 推荐(0) 编辑
摘要:李超线段树 用途:给定 ny=kx+b 形式的线段,问 x=x[0] 与哪条线段交点的纵坐标值最大. 对于李超树的每一个区间,维护这条区间的 “优势线段”,即区间 $\mat 阅读全文
posted @ 2021-09-06 17:06 guangheli 阅读(71) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示