Query on a tree
题目链接: http://vjudge.net/problem/SPOJ-QTREE
题目大致意思就是: 给你一棵树,有连个操作:
● 第一个是查询任意两个不同节点上的最短路径上的最大权边!
● 第二个操作修改某一条边的权值;
对于一棵树,数的深度如果很大,那么每次查询两个叶子节点,时间复杂度还是很高的。所以我们就把树分成一条一条的树链,所谓树链就是:沿着树的一条路径。 得到路径后,我们可以用堆,线段树进行维护。在一些题目中,树链剖分题目,一般可以用dfs 进行剖链。
鄙人学习树链剖分所用到资料:
ACdreams 大神博客 ,看这篇博客主要知道什么是树链剖分,以及原理;知道树链剖分部分,剖分树链之后需要用一些数据结构维护,大部分用线段树。线段树比较常用。所以我也用线段树;
如果觉得博客看着费劲,还是不知道原理是什么的话,可以尝试看看 UESTCACM 每周算法讲堂 dfs序与树链剖分
有了以上知识储备,做这个题目也比较轻松! 线段树要会!!可以参考kuangbin题解来做;附上我AC代码,一是为了存个模板,二还请大佬指出错误!
#include
#include
#include
#include
#include
#include