杂题选做(2)
QOJ2617
首先建图跑暴力是猫娘应该都能想出来。时间复杂度 \(O(n^3m\cdot 2^m)\)。考虑优化。
只有 add 操作是不好搞的。那 add 一个 filter 会往后跳 \(O(n)\) 个位置。考虑数据结构优化。他们说这相当于,颜色段????听不懂。
官方给的方法是反着考虑这个过程。left 和 right 不变,remove 反过来变成添加也是简单的。add 反过来,相当于选一个 filter 去掉,然后往左边找一个在对应 \(mask\setminus \{j\}\) 上和它都相等的,并且 \(\{j\}\) 和它不相等的。
大约相当于我在 \(mask \setminus \{j\}\) 上一直跳 left。然后由于你最短路做的是 BFS,所以这个跳 left 的瓶颈就是会重复跳到已访问的结点。
建 \(2^m\) 个并查集就好,总复杂度变为 \(O(n^2m\cdot 2^m \alpha( n))\)。

浙公网安备 33010602011771号