(树链剖分+线段树)POJ - 3237 Tree
前言: 一直听说树链剖分-树链剖分,现在见识一下,,,感觉不是很难0.0 看了一下kuangbin模板基本秒懂 对于点,按重边优先给予每个点一个编号,对于一条重链上的点,编号则是连续的,将所有编号映射到线段树上,即可进行一切区间操作。 对于边的处理,我们将所有边对应到这条边节点更深的那个点上即可。 如果需要的操作只有求和,和单点更新/区间更新,直接用树状数组也是可以的,可能常数大那么一点点。 如果还需要更加强大的操作,显然用splay树维护也是可以的。。 比如树链上所有权值翻转等等。。不过,,这样差不多应该就快到LCT了。。虽然自己不会。。 不过过几天就该看了。 题意: 一棵树,每条边有一个权值,三种操作: 1、改变第i条边权值为v 2、将节点a到节点b之间的边权值取反 3、查询a到b之间最大的边权值 分析: 显然就是普通的树链剖分和线段树 但是要记得pushdown, 而对于lazy标记rev,当传下去的时候,不应该直接赋值为1或者0,而应该直接取反,用异或即可。 代码: 1 #include <math.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include <time.h> 6 #include <algorithm> 7 #include <iostream> 8