[BZOJ3784]树上的路径(点分治+dfs序+st表+堆)

题目描述

传送门

题解

这道题并不是像普通的点分一样现在根上加然后在儿子上把不合法的减去,而是直接只能查询合法的,这种思维定式要改一改了。。。
刚开始一直在往这方面考虑。。直到看到有人说这道题和超级钢琴那道题很像才受到启发yy出这种不靠谱的的做法。。。

首先从当前根出发到每一个点都求出了一条路径,那么怎么组合是合法的呢?就是路径的两个端点不能在根的同一个儿子里
是否在同一个儿子里可以用dfs序来区分,那么标记dfs序之后,每一个点能匹配的点就得到了一段连续的区间
如果直接将其展成序列的话,也就等价于每一个点对应一段合法的区间,然后求前m大
这就已经变成超级钢琴那道题了
首先对于每一个点将其区间内的最大值求出,然后压到堆里。每从堆中弹出一个点就将其对应的区间[l,loc-1][loc+1,r]都加进堆里,这样不断地弹m次就行了
时间复杂度 O(nlogn+mlogk)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值