树上交易(NW)

9 篇文章 0 订阅

给定一棵 n 个节点的树,每个节点有一个商品的价格,可以进入买入或者卖出。
有 m 个询问,询问从一个节点到另一个节点,可以在路途中买入和卖出一次,求最大收益。输入数据均不小于5e4。

找到这个版本带修的题P3976 [TJOI2015] 旅游,不过做法只会树剖套线段树不会LCT,所以干脆讲回原题。

法一

常规做法,树剖套线段树。

注意买入的点早于卖出的点,假设原树退化成链的情况,考虑分治,维护左右区间的答案/最小值/最大值,合并区间时把左区间走向右区间 和 右区间走向左区间的答案都记录上,最大最小值简单合并不用阐述。

还原回一棵树,询问仍然是一段链,自然地想到套个树剖即可,整个过程很流畅。

法二

LCA倍增。

说实话一开始真没想到,看了标签才顿悟。想到这个想法本质是因为不带修,很像RMQ,但是这个做法的推理过程不太好想,如果开始还将原题先退化成链,即使想到RMQ,由于原树编号不连续,也就不敢往上套。不过这道题给了启迪,树不带修的题很大可能与LCA倍增的做法有关系。

做法也很显然,除了既要维护 f u , i f_{u,i} fu,i 还要维护 m x u , i , m n u , i , [ l − > r ] u , i , [ r − > l ] u , i mx_{u,i},mn_{u,i},[l->r]_{u,i},[r->l]_{u,i} mxu,i,mnu,i,[l>r]u,i,[r>l]u,i外,其他和正常的倍增求LCA基本保持一致。


目的就是,把树的题一道道吃透吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值