![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ST表
文章平均质量分 62
Hanks_o
一名。
展开
-
bzoj1095: [ZJOI2007]Hide 捉迷藏(动态点分治)
题目大意: 给出一棵树,初始每个节点为黑色。 C操作改变一个节点的颜色。 A操作询问树上最远的两个黑色节点的距离。这道题我也是学了好久。解法: 我用到的是动态点分治,当然大牛们打LCT也是可以的(万能的LCT!!) 先普及一下树的重心(相信很多人都知道) 相对于上面这棵树,用f[i]表示删除i之后剩下的最大的子树的节点数(第一次听可能有点懵逼) 拿节点4来说,将4删除后剩...原创 2017-08-26 18:52:53 · 1023 阅读 · 3 评论 -
bzoj1095: [ZJOI2007]Hide 捉迷藏(动态点分治+树上ST表)
题目传送门 这道题跟我之前做的Qtree4几乎是一样的。 都是神题。 其实我很想膜一下出题人的。 太强了。详细解法还是看我的博客吧。 再写要写死人了。 Qtree4博客 不会动态点分治的话还是一定要看我这篇博客的(毕竟我写的很辛苦。)这道题与Qtree4唯一的不同就是边权为1。 每次dep+1就好。代码实现(Qtree4代码改的):#include<set>#include<map原创 2017-09-25 20:15:05 · 474 阅读 · 0 评论 -
ST表算法详解
ST表算法详解(算是吧)ST表就是一个用来解决rmq(区间最值)问题的算法。 ST表不支持在线修改。 预处理时间复杂度O(nlogn),查询时间O(1)。 ST表算法详解(求最小值): 用mn[i][j]表示从j到j+2^i-1的最小值(长度显然为2^i)。 任意一段的最小值显然等于min(前半段最小值,后半段最小值)。 那么mn[i][j]如何用其他状态来继承呢? j到j+2^i-1原创 2017-08-25 08:21:55 · 22966 阅读 · 13 评论 -
倍增LCA(最近公共祖先)算法详解
算是详解吧算法策略: 比如求x和y的最近公共祖先。 先让深度较大(离根较远)的节点跳到与另一节点相同深度的位置(并不一定是同一个点)。 然后两个节点一起往上跳,跳到他们最近公共祖先的孩子停止。 然后返回结果的父亲节点即可。倍增需要用到ST表算法(差不多吧)。 没学过ST表看这里用f[i][j]表示i往上2^j的节点。 比如f[i][0]表示i的父亲,f[i][1]表示i的爷爷…… 有了原创 2017-09-02 10:33:38 · 5303 阅读 · 4 评论