[2020多校A层12.1]树(倍增/单调栈/dfs栈)

[2020多校A层12.1]树

求解树上从u到v的最长贪心上升序列,也就是只要有比它大的就选择它,可以发现这个问题性质,就是每个点对应了唯一的一个第一个比它大的点,那么我们可以向它们之间连边,然后问题就转化为求解从当前点上面的链中第一个大于c的位置和第一个深度小于dep[v]的位置。然后树上倍增维护即可。

另外我们也可以用单调栈直接处理,将询问离线,然后维护当前点向根这条链的单调栈,然后二分对应位置即可。然后对于回溯需要存储下来弹掉的元素,然后回溯时要加回去。

posted @ 2020-12-01 19:25  dinlon  阅读(46)  评论(0)    收藏  举报