
树倍增
文章平均质量分 55
commonc
这个作者很懒,什么都没留下…
展开
-
BZOJ2851: 极限满月
题目大意:首先给你所有的A集合,第i个集合里的数全部小于i,接着开始构造B集合,第i个B集合是由{i}∪前面所有满足条件的Bk集合的交,满足条件的Bk集合指的是满足k∈Ai,然后给Q个询问,每次询问一堆B集合的并的元素个数 这题考试的时候我看了挺长时间....到最后也没想出来...考完了之后xuruifan告诉我是虚树,然后我就震惊了,因为我没看出来跟树有半毛钱关系... 然后就只能回原创 2016-06-13 19:14:13 · 976 阅读 · 0 评论 -
BZOJ2791: [Poi2012]Rendezvous
题目大意:有n个点,每个点有一条出边,再给出q组询问,每组询问由两个顶点a、b组成,要求输出满足下面条件的x、y: 1. 从顶点a沿着出边走x步和从顶点b沿着出边走y步后到达的顶点相同。 2. 在满足条件1的情况下max(x,y)最小。 3. 在满足条件1和2的情况下min(x,y)最小。 4. 在满足条件1、2和3的情况下x>=y。 如果不存在满足条件1的x、y,输出-1 -1。 2原创 2016-06-30 14:41:31 · 717 阅读 · 0 评论 -
BZOJ3364: [Usaco2004 Feb]Distance Queries 距离咨询
题目大意:给一棵树,求两点间的距离 方向什么的根本没用,挺无聊的一道题 随便以一个点为根,x,y之间的距离=d[x]+d[y]-2*d[LCA(x,y)] 只需要求LCA就可以啦,树倍增随便搞 #include #include #include #include #define N 100010 using namespace std; int fa[N][21]; in原创 2016-09-01 15:01:43 · 960 阅读 · 0 评论 -
BZOJ2093: [Poi2010]Frog
题目大意:给一条线上n个石头,青蛙从跳m步,每次跳到离当前第k近的石头,求以所有点为起点最终会跳到哪 很关键的一步是求出从每个点跳一步会去到哪里 这个可以用两个指针维护一段区间,代表前k近的石头的区间,然后从左到右扫一遍,指针也跟着平移,就能O(N)扫出来了 之后的部分可以在环套树森林上DFS来O(N)出解,不过这个有点麻烦,于是我就写了个倍增(环套树倍增也算树倍增吧?) 不过倍增原创 2016-09-21 09:27:54 · 817 阅读 · 0 评论