CF1400G 题解
题意
有 \(n\) 人和 \(m\) 对敌对关系,每个人有一个条件区间 \([l_i,r_i]\)。
现在要在这 \(n\) 人中选出若干人。定义一个合法的选择 \(\{S\}\),当且仅当对于 \(\{S\}\) 中的所有人 \(i\),\(l_i≤|S|≤r_i\),且 \(\{S\}\) 中所有人互不敌对。
求有多少种合法的方案数,答案对 \(998244353\) 取模。
\(1≤n≤3×10^5,0≤m≤min\{20,\frac{n(n-1)}{2}\},1≤l_i≤r_i≤n\)。
题解
因为 \(m\) 很小,考虑容斥。设 \(S\) 为所有敌对关系的集合,\(cnt(S)\) 为 \(S\) 中的限制都不满足的方案数。答案为
\[\sum_{T⊆S}(-1)^{|T|}cnt(T)
\]
都不满足,则所选集合中的边的两顶点都要选择。由这些点条件区间的交集可以知道选择的点的个数的范围,设为 \([L,R]\)。枚举这个范围内的数。设 \(c\) 为必须选的点个数,\(s_i\) 表示选点个数为 \(i\) 时可以选择的点数(差分即可),则:
\[cnt(T)=\sum_{i=L}^R \binom{s_i-c}{i-c}
\]
由于 \(c∈[1,2×m]\),利用前缀和预处理即可。