题意简述
有 $n$ 个城市,组成一张树形网络。第 $i$ 个城市售卖价值为 $a_i$ 的珠宝。zps 的父母计划了 $q$ 次行程。每次先带上价值为 $c$ 的珠宝,从城市 $u$ 走到城市 $v$ (保证 $v$ 在 $u$ 到 $1$ 的路径上)。如果当前的城市售卖的珠宝比手头的贵(严格大于,等于不行),那么 zps 的父母会买入这个珠宝。
对于每次行程,求出 zps 的父母进行了多少次“买入”操作。
$n,q,c,a_i\le 10^5$,$1\le u,v\le n$
思路
我们发现,对于每一次行程,除了第一次要特判一下之外,我下一次走到哪里应该是固定的。
假设我们当前在 $u$,那么我们下一次走的位置,应该就是 $u$ 往上跳,第一个 $a_i>a_u$ 的 $i$(当然,如果这个 $i$ 跳到了 $v$ 外面,那么我们不算它)
于是我们考虑,先用倍增求出第一个 $a_i>a_u$ 的 $i$,然后重新建图,把 $u$ 直接连到 $i$ 上。这样,对于每次行程,我们把首尾特判掉之后,就相当于新树上求一段路径的长度了。这个直接维护一个深度就能求了。
代码
1 |
|