POJ2763 Housewife Wind 树链剖分 边权
传送门:http://poj.org/problem?id=2763
题意:
n个点的,n-1条边,有边权
修改单边边权
询问 输出 当前节点到 x节点的最短距离,并移动到 x 节点位置
题解:
树链剖分裸题
树链剖分就是将树分割为多条边,然后利用数据结构来维护这些链的一个技巧
- 重儿子:父亲节点的所有儿子中子树结点数目最多( size*siz**e* 最大)的结点;
- 轻儿子:父亲节点中除了重儿子以外的儿子;
- 重边:父亲结点和重儿子连成的边;
- 轻边:父亲节点和轻儿子连成的边;
- 重链:由多条重边连接而成的路径;
- 轻链:由多条轻边连接而成的路径;
1.求出子树大小和每个点的重儿子,处理sz数组,son数组,fa数组和dep数组
2.连接重链,记录dfs序,每个链的顶端节点,处理出rank数组,top数组,id数组
3.维护链上信息
修改边权就查询点的深度大的点,用大的点去存这条边的边权,其余的就和点权的是一样的了
代码:
#include
#include