
树剖
文章平均质量分 80
zxxxxzzz
这个作者很懒,什么都没留下…
展开
-
bzoj 2243 [SDOI2011]染色 树剖+线段树
题意略。首先树剖拆出链后建线段树,然后在线段树上维护,线段树节点记录的信息为最左和最右端的颜色(0~1e9,要从-1开始初始化),和该段区间里面的所记录的颜色段数量。因为考虑到,左子树的最右端和右子树的最左端颜色可能相同,那么相同时当前节点记录的颜色段数量便要-1,即( query( lson ) + query( rson ) - ( tr[rt<<1].rc == tr[rt<<1|1].原创 2015-03-26 20:19:20 · 436 阅读 · 0 评论 -
spoj 375 Query on a tree 树剖模板
#include using namespace std;const int MAXN=10005;struct Edge{ int to, next;}edge[MAXN<<1];int head[MAXN], tot;int top[MAXN]; //子重链起点int fa[MAXN]; //父节点int deep[MAXN]; //深度int num[MAXN]原创 2015-03-19 22:09:56 · 411 阅读 · 0 评论 -
bzoj 1036 [ZJOI2008]树的统计Count 树链剖分点权果题
#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define lson l, mid, rt << 1#define rson mid + 1, r, rt << 1 | 1#原创 2015-03-22 11:08:25 · 402 阅读 · 0 评论 -
hdu 4897 Little Devil I 树剖(题如其名..)
题意:最开始树上的边全是0,在树上有三种操作,1 使某条路径上的边翻转(0->1, 1->0)。2 翻转某条路径上的与 a 和 b 之间的简单路径相邻的所有边。3查询某条路径上有多少个1。详参考http://blog.youkuaiyun.com/u013368721/article/details/39338679先是树剖无疑,然后用线段树维护的时候设置三个遍历:sum记录1的个数,flip原创 2015-03-30 22:01:21 · 571 阅读 · 0 评论 -
hdu 3966 Aragorn's Story树剖成段更新单点查询模板
题意:一棵树上要么修改一条路径的值,要么查询某点的值果树剖+线段树。小总结:树剖是重建树链之后,依靠数据结构(seg | bit)更新的,那么对于要操作的步骤(查询或者是修改),就是在数据结构里面完成的,即 在update_path(query_path)里面进行线段树或者树状树枝等数据结构的更新操作。---------------------------》对于分不清到底要更新原来树上的点原创 2015-03-23 23:40:44 · 403 阅读 · 0 评论 -
hdu 5029 Relief grain 树剖
题意:n个点的树,每次操作选择路径,给这条路径上的点一个值,m次操作后,问每个点被给的最多的那个值是什么,无则输出0先是树剖预处理,然后注意到,答案是所有操作完的最终结果,即要离线处理出每个点被给的值情况.我们可以把每个操作看成对某几段连续区间的操作,那么每次更新就可以采用“头加尾减”的方式维护,至于维护的数据结构当然是线段树,但是注意的是,维护的是树剖完链上的点,对于查询,我们需要重新映射回原创 2015-04-01 00:17:32 · 426 阅读 · 0 评论 -
poj 3237 Tree树剖边权更新模板
题意:将树上某条路径的值正负倒换,或者使某条边变成val,或者查询某条路径上的最大的边权裸边权更新,与点权更新不同的是,边权中记录边的编号是pos[x] + 1,也就是由重建链之后的子节点记录,pos[x]+1同pos[ son[x] ]。详见代码,另附有数据#include #include #include #include #include #include #inc原创 2015-03-24 21:55:12 · 691 阅读 · 0 评论 -
hdu 5274 Dylans loves tree 树剖
题意:给出一棵树及树上点权值,每次可更改某点权值 或者 查询某条路径上点权出现次数为奇数的那个点权是多少。因为每次一条路径上出现奇数次点权最多只有一个,而点权出现次数为偶数的时候是可以通过异或消去的,那么直接套树剖+线段树维护就行了。这里有个坑点,即点权为0,那么出现0 0 0的时候异或值为0,但是0这个点权还是出现了三次。应该输出0,解决办法可以在线段树上多维护一个0的个数,或者点权+1原创 2015-06-24 13:03:28 · 460 阅读 · 0 评论