![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【数据结构】点分治&动态点分治
mysterynoip
蒟蒻OIer
展开
-
bzoj 1095 [ZJOI2007]Hide 捉迷藏 动态点分治+堆/线段树
题面 题目传送门 解法 数据结构题…… 讲一下两种不同的思路吧,用括号序列怎么做我不会 因为有修改并且有关于点之间距离的询问,所以我们考虑动态点分治 首先建出点分树,然后每一个点开两个堆。“第一个堆记录子树中所有节点到父亲节点的距离,第二个堆记录所有子节点的堆顶,那么一个节点的堆2中的最大和次大加起来就是子树中经过这个节点的最长链。然后我们最后开一个全局的堆,记录所有堆2中最大值和次...原创 2018-09-15 16:41:55 · 186 阅读 · 0 评论 -
bzoj 3697 采药人的路径 点分治
题面 题目传送门 双倍经验传送门 解法 这道题的点分治依然比较基础 将黑色的边变成1,白色的边变成-1,这样比较容易判定。 因为要满足路径中间存在一个点使得这个点可以将这条路径分成两段且长度为0,所以这样就变得不是特别容易处理。 考虑在枚举分治重心的时候,已经处理完了前面的子树,假设对于当前的子树中的一点xxx,当前的深度为ddd,那么前面的子树中一定要有一个深度为−d-d−d的点,假设为yyy...原创 2018-10-20 20:16:44 · 129 阅读 · 0 评论 -
bzoj 3672 [Noi2014]购票 斜率优化+cdq分治+点分治
题面 题目传送门 解法 先不考虑树的情况,考虑一条链怎么做。 显然可以写出dp:f[i]=min(f[j]+(d[i]−d[j])p[i]+q[i])f[i]=min(f[j]+(d[i]-d[j])p[i]+q[i])f[i]=min(f[j]+(d[i]−d[j])p[i]+q[i])。然后把式子稍作展开,可以发现这显然是一个斜率优化的形式。决策的点坐标为(d[j],f[j])(d[j],f...原创 2019-03-23 16:45:37 · 163 阅读 · 0 评论