题解 P4155 【[SCOI2015]国旗计划】

· · 题解

解: 首先破链成环,就转化为了区间覆盖问题。

每一个区间都不能被其他区间所包含,

也就是如果li<lj,那么一定满足ri<rj,然后就可以贪心。

假设要覆盖整个区间,那么选择的线段是确定的,即每一个战士要找的下一个战士都是确定的。

这样可以按照左端点排序,预处理出每个战士的下一个接力者。

对于必须有这个战士参与,我们可以以这个战士为起点,寻找经过一圈之后再次回来最少需要多少条线段。

因为是链,所以我们用倍增预处理。

f[i][j]表示从i点走2j步到达的点,如果f[i][j]所到达的点没有超出m,就可以从i点走2j步,到达下一个点 代码