树分治学习笔记
点分治
0.用处
点分治一般用于树上路径的问题。
比如求条数等。
1.点分治过程
-
选择一个根节点
-
计算贡献,贡献一般有一下两种
1.两个点的路径经过根节点
2.两个点在同一个子树内
- 然后把根节点删掉,分成若干棵树,对每一棵树做同样的操作
然后每一次我们只需要计算两个点的路径经过根节点的贡献即可。
2.例题
首先我们先想暴力,的写法。我们枚举点
然后我们把所有和
假如队列里的点的父亲是其他城市的,那么就把这个城市的所有点加进来。
假如队列里的父亲已经入队过,忽略最后我们统计有多少种点入过队,那么就是答案。
时间复杂度为
然后我们考虑优化。
如果以
那么我可以直接把以
也就是说,以一个点
于是点分治即可。时间复杂度为
代码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话