CF1400G Mercenaries
题目描述
Polycarp 正在玩一款(又一款!)策略类电脑游戏。在这款游戏中,他领导着一支雇佣兵军队。
Polycarp 想要召集他的军队去执行一个任务。有 $n$ 个雇佣兵可供雇佣,军队应由他们的某个子集组成。
第 $i$ 个雇佣兵可以被选中,当且仅当被选中的雇佣兵总人数不少于 $l_i$(否则他认为任务注定失败),且不多于 $r_i$(他不想和太多其他雇佣兵分享战利品)。此外,有 $m$ 对雇佣兵彼此憎恨,不能被同时选中参加同一个任务。
Polycarp 需要考虑多少个非空的雇佣兵子集?换句话说,计算满足以下条件的雇佣兵非空子集的数量:对于每个被选中的雇佣兵 $i$,子集的大小属于 $[l_i, r_i]$,且子集中没有两名彼此憎恨的雇佣兵。
答案可能很大,请输出对 $998244353$ 取模后的结果。
输入格式
第一行包含两个整数 $n$ 和 $m$($1 \le n \le 3 \cdot 10^5$,$0 \le m \le \min(20, \dfrac{n(n-1)}{2})$)——雇佣兵的数量和互相憎恨的雇佣兵对数。
接下来 $n$ 行,每行包含两个整数 $l_i$ 和 $r_i$($1 \le l_i \le r_i \le n$)。
接下来 $m$ 行,每行包含两个整数 $a_i$ 和 $b_i$($1 \le a_i < b_i \le n$),表示雇佣兵 $a_i$ 和 $b_i$ 互相憎恨。列表中没有重复的对。
输出格式
输出一个整数,表示满足条件的非空子集数量,对 $998244353$ 取模。
说明/提示
由 ChatGPT 4.1 翻译