题目链接
题意分析
这是一道树上斜率优化题
首先
\[dp[i]=min\{dp[j]+(dis[i]-dis[j])* p[i]+q[i]\}(j∈Pre_i)
\]
那么就是
\[p[i]=\frac{dp[i]-dp[j]}{dis[i]-dis[j]}
\]
我们根据\(p[i]\)递增可知
我们需要使用单调队列维护下凸包
但是由于是树 所以我们不可以进行一般的单调队列维护
所以这里我们只好进行暴力二分出最优的位置了
毕竟单调队列实现起来不是真正的删除 而是头尾指针的移动 以及唯一的取代
然后我们会回溯时恢复指针以及取代值就可以了
CODE:
#include
#include
#include
#include
#include
#include
#include
#include
#include
HEOI 2019 RP++