题解:P12704 Retribution
我也不知道为什么能过做法。
考虑暴力缩点,然后做线段树合并。
细节上,由于要在可持久化线段树上合并,所以每次要新开节点,在合并的时候多剪枝减少栈调用和新开节点。
如果尝试将询问离线挂在每个 SCC 上的话,
如果乱开东西大概率空间会炸。
一共有
实际精细计算一下空间只要
留下不到一百兆给栈调用和临时的队列啥的应该是差不多够了,事实上对于数据是刚刚好。
代码。
后话
机房里大家都觉得这种东西非常假(我也觉得很假,但是就是写了然后过了),但实测这玩意跑得飞快。
我们在做合并的时候,只要发现处于同一个点就可以直接退出。而题里给出的图,会使得有非常多的线段树共用了同一个节点,合并复杂度事实上非常跑不满。
根据我本人精心构造的数据以及对数据点的判断,线段树新开的节点实际非常少大概在