题目大意
有 $m$ 个非空集合,他们两两交集为空,并集为 $[1, n]$。
要你选若干个集合,假设他们的并排序后是数组 $b_1,\cdots,b_{|b|}$,给定 $d$,要求
- $b_1 \le d$
- $b_{i+1}−b_i \le d$
- $n−d+1 \le b_{|b|}$
最后问你最少选几个集合能满足要求。
$n,d\le10^5,\ m \le 20$
题解
问题转化成:$1$~$n$ 每个数都有一个颜色,要你在这个数轴上选一些数,使得两两间隔(包括开头、结尾)不超过 $d$,并且选出的颜色种类数最少。
也就是说任意连续的 $d$ 个数中,至少有一个被选。假设这 $d$ 个数的颜色集合是 $S$,那么答案的颜色集合 $ans$ 必须与 $S$ 有交。
也就是现在有 $n-d+1$ 个限制,你要求一个最小的 $ans$,使得 $ans$ 与所有限制有交。
有交不好做,于是考虑无交,即看看哪些 $ans$ 是不可行的。
于是开一个 $2^{20}$ 的标记数组,把所有限制打上标记,然后从大到小合并标记,这样就知道哪些东西可以作为 $ans$ 哪些不可以了。