题解

cookiebus 2023-10-05 5:21:52 8 返回题目

​ (本题解默认同级)

​ 考虑对操作序列分块。求询问的答案可以分为两步:先找到询问前最后一次覆盖询问点的操作,然后再对所有在这次操作后覆盖询问点的操作的

​ 考虑操作的部分,维护一个栈,按顺序处理所有操作,每遇到一个操作就将其加入栈中,当栈大小满时就把这些操作地在图上做一次倒序覆盖,保证每个点只被访问一次。询问时只需要考虑查询图上的覆盖标记以及栈中的不超过操作即可。

​ 再考虑操作的部分,我们要对一段时间区间内的能覆盖到询问点的操作的。仍然考虑对操作序列(时间)分块,每个整块做一次的覆盖(按照权值从小到大,同样保证每个点只被访问一次),零散块暴力。

​ 上述做法中涉及到查询图中两点是否可达这一传递闭包问题,可以用压位bitset做到

​ 还有一点需要注意的是的空间可能开不下,不过可以分多次处理,每次标记个点作为关键点,只处理每个点能否到达这些关键点的bitset,也只回答关于这个关键点的询问,这样空间度复杂度是,时间复杂度是

{{ vote && vote.total.up }}

共 5 条回复

Fat_Fish

1

Fat_Fish

1

Fat_Fish
Fat_Fish
Evan_liu