树上求一条链,求
显然分数规划,二分就是否存在链长符合要求$\sum e_i.v-mid\geq 0$
点分治可以做,常数有点大。
长链剖分,对一颗子树$u$来说$f[v][i]+f[u][j]+e.v\geq 0,L\leq i+j+1\leq U$。 即可
为了避免重复,选择边插入边计算,然后一遍合并,但是这样是$n^2$,可以选择用线段树维护$dfn[v]+i,dfn[u]+j$。
- 在长链转移的时候,询问最小值,线段树也容易操作。
- 对比使用指针,更加明确操作的数组在哪,更好维护。$dp[dfn[x]+y]\rightarrow dp[x][y]$
- 由于边权可能$\leq -10^6$,线段树以及$-INF$,注意开大。
$BZOJ$过得去,$luogu,TLE,90$
代码
1 |
|