解决的问题
对于给出的树上两点求之间的最值或者更新操作变为logn。其他方法
Tarjan求LCA的复杂度为 O(N+Q)所以不断更新复杂度太高。本质: 就是将树划分为不重合的多条链每条链都有一个线段树中的编号(可类比dfs序转换线段树的想法)+线段树。在求的过程中根据重链不断逼近再用线段树维护即可。
入门文章
练习题目一般有对点建树和对边建树两种方案,看题目要求。对第几条边进行操作这种情况...
分类:
其他好文 时间:
2015-06-03 09:50:09
阅读次数:
129
1 /* 2 hdu3974 3 dfs序建树,然后区间修改查询; 4 */ 5 #include 6 #include 7 #include 8 #include 9 #define MAX_N 50005 10 using namespace std; 11 ...
分类:
其他好文 时间:
2015-06-01 00:36:00
阅读次数:
149
树的最小表示法 给定两个有根树的dfs序,问这两棵树是否同构 题解:http://blog.sina.com.cn/s/blog_a4c6b95201017tlz.html题目要求判断两棵树是否是同构的,思路是用树的最小表示法去做。这里用的最小表示法就是将树的所有子树分别用1个字符串表示,要按字.....
分类:
其他好文 时间:
2015-05-27 22:23:56
阅读次数:
227
题目大意:给定一棵树,初始每个点都有一个颜色,支持三种操作:
1.将某个点到根的路径上所有点染上一种新的颜色
2.将某个点到根的路径上所有点染上一种新的颜色,然后把根设为这个点
3.定义一个点的代价为这个点到根路径上颜色的种类数,求某个点子树中所有点代价的平均值我真是炖了狗了……
容易发现这玩应就是个LCT,操作1就是Access,操作2就是Move_To_Root,代价就是一个点到根路径上...
分类:
其他好文 时间:
2015-05-22 19:17:20
阅读次数:
168
暑假出的题,其实是从一道BZOJ的题摘下来的,原题还有换根操作,只能用splay动态维护DFS序列。恩先放一个之前写的DFS序列(带入栈出栈标记)+线段树版本的:(写得丑请不要介意)询问O(logn)修改O(logn)#include#include#includeusing namespace s...
分类:
其他好文 时间:
2015-05-16 11:52:03
阅读次数:
144
题目描述 Description
在卡卡的房子外面,有一棵苹果树。每年的春天,树上总会结出很多的苹果。卡卡非常喜欢吃苹果,所以他一直都精心的呵护这棵苹果树。我们知道树是有很多分叉点的,苹果会长在枝条的分叉点上面,且不会有两个苹果结在一起。卡卡很想知道一个分叉点所代表的子树上所结的苹果的数目,以便研究苹果树哪些枝条的结果能力比较强。
卡卡所知道的是,每隔一些时间,某些分叉点上会结出一些苹果,但是卡...
分类:
移动开发 时间:
2015-05-14 18:49:41
阅读次数:
169
树链剖分/dfs序 其实过了【BZOJ】【4034】【HAOI2015】T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果root在x的子树中(以1为根dfs的时候),那么现在x的子树就变成了整个dfs序中,除去含有r...
分类:
其他好文 时间:
2015-05-13 21:28:18
阅读次数:
196
本题被描述者现在才来做这道题。。。对我就是KPM。。。先Orz云神吧~把所有字符串反向建立一棵Trie,然后建立DFS序,那么Trie上的每个点的子树就对应着DFS序上的一段数。然后将每个字符串的标号插入,无修改的话只需要主席树。#include #include #include #include...
分类:
其他好文 时间:
2015-05-05 18:44:00
阅读次数:
122
本来直接树剖就好了,但是树剖会多一个log非常不开心我们来考虑维护dfs序,那么序列上的每个元素表示该点的答案单点点权修改操作就是dfs序上段加操作子树修改操作就是dfs序上段减一个数,然后每个点加上固定值乘以它的深度具体的来讲。。。dfs序上每个点维护三个东西,叫v,tag和times,分别表示当...
分类:
其他好文 时间:
2015-05-04 23:43:09
阅读次数:
475