浅谈 DFS 序的基础应用
注:以下例题的修改和查询操作都是与树的点权有关,若与边权有关也是类似的做法只需要在细节上略微修改即可。
例题 1
个节点的树, 次操作,单点加,子树求和,。
DFS 序转化为序列上单点加,区间求和。
例题 2
个节点的树, 次操作,子树加,单点求值,。
DFS 序转化为序列上区间加,单点求和。
例题 3
个节点的树, 次操作,子树加,子树求和,。
DFS 序转化为序列上区间加,区间求和。
例题 4
个节点的树, 次操作,路径加,单点求值,。
树上差分,将修改转化为路径上两个端点加,LCA 和 LCA 的父亲减,查询转化为子树求和。
DFS 序转化为序列上单点加,区间求和。
例题 5
个节点的树, 次操作,单点加,路径求和,。
将查询转化为路径上两个端点到根的链的和,减去 LCA 和 LCA 的父亲到根的链的和。
注意修改需要差分保证只对子树内部的节点到根的链产生贡献。
DFS 序转化为序列上单点加,区间求和。
例题 6
个节点的树, 次操作,路径加,子树求和,。
修改和 例题 4 一样转化,查询考虑以 为根的子树内的每个点 的差分数组 的贡献:
,因此分别维护 和 即可。
DFS 序转化为序列上单点加,区间求和。
例题 7
个节点的树, 次操作,子树加,路径求和,。
查询和 例题 5 一样转化,修改考虑以 为根的子树加 对子树内每个点 到根的链的贡献:
,因此分别维护 和 即可。
注意修改仍然需要保证只对子树内部的节点到根的链产生贡献。
DFS 序转化为序列上单点加,区间求和。
例题 8(或者说是一个思考)
下面这三个问题仅靠 DFS 序可做吗?
1、单点加,子树加,路径加,单点求值,子树求和
2、单点加,子树加,单点求值,子树求和,路径求和
3、单点加,子树加,路径加,单点求值,子树求和,路径求和
前两个问题实际上是上面某些例题的结合体,显然能做。
DFS 序的强大之处在于将每棵子树对应一个区间,所以单点加,单点求值,子树加,子树求和都能做。
但是路径并不能在 DFS 序上表示成一个区间,所以只有路径加或者只有路径求和的情况可以通过差分等方法转化成一个区间。
但是如果同时出现路径加和路径求和仅靠 DFS 序确实无能为力……
所以第三个问题怎么做?可以考虑树剖 求解。
如果 呢?可以用静态 LCT 一个 求解(toptree 其实也是可以做到一个 但是带个 的常数……)。
练习题:
#144. DFS 序 1(同 例题 1)
#145. DFS 序 2(同 例题 3)
#146. DFS 序 3,树上差分 1(同 例题 4 与 例题 6 的结合体)
#147. DFS 序 4(同 例题 5 与 例题 7 的结合体)
To be continued...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!