点分治
2021/11/27 23:11:08
本文主要是介绍点分治,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
点分治常用于树上路径统计等问题。
点分治
每次分治过程大致如下:
-
我们先求出当前连通块树的重心;
-
处理与重心有关的答案;
-
删除重心
-
递归处理与重心相连的子连通块。
伪代码如下:
void solve(int x) { Find1(x,0),Find2(x,0); // 找到重心 rt // 处理和 rt 有关的答案 used[rt]=true; for(/*与 rt 直接相连并且没有被删除的节点*/) solve(ver); }
P3806 【模板】点分治
P4178 Tree
树上 \(0/1\) 背包:给定一棵树,每个点上有一个物品有一个价值 \(w_i\),\(m\) 次询问,每次询问 \(u\) 到 \(v\) 的路径上选择 \(k\) 个物品的最大价值。
P6326 Shopping
动态点分治
咕咕咕
这篇关于点分治的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现