只考虑连
au≤av 的边,把所有边按照边权从小到大排序,跑一遍 dfs 求出最长路即可。
你发现这种要求满足限制的题,且可以通过
xr−xl=di 构造关系。直接考虑差分约束,如果说出现当前
u,v 距离与之前所求矛盾则无解。根据
{xr−xl≤dixl−xr≤−di 建边。
首先所有被其它区间完全覆盖的区间一定是要删的。
将所有线段左端点第一关键字右端点第二升序排序,考虑 dp。记
fi,j 表示前
i 个中选了
j 个删除,钦定
i 不删的最长区间覆盖。转移枚举上一个没删的区间。
fi,j=k<imax{fk,j−(i−k−1)+ri−max(li,rk)}
-
那么有
fi,j=k<imax{fk,k−(i−j−1)+ri−li},那么我们只需要知道
fk,k−(i−j−1) 对于每个
i−j−1 的最大值即可。
-
那么有
fi,j=k<imax{fk,k−(i−j−1)+ri−rk},同理的我们需要维护
fk,k−(i−j−1)−rk 的最大值。
那么只需要单调队列维护第二种情况的同时更新第一种即可。