shabby ds

gym103687K. Dynamic Reachability

首先看到这个巨大的时限 12s12\operatorname{s} ,盲猜一手是 bitsetbitset 或者是分块结果两个都有

最直观的想法肯定是直接搜,复杂度是 O((n+m)q)O((n+m)q) 的,不可以接受,但是这种做法太没有拓展性了,考虑一些有拓展性的做法,发现一般图传递闭包是 O(n3ω)O(\frac{n^3}{\omega}),但是拓扑图的传递闭包是 O(nmω)O(\frac{nm}{\omega}) ,考虑把他缩点成一个拓扑图然后拓扑排序,时间复杂度 O((n+m+nmω)q)O((n+m+\frac{nm}{\omega})q) 更加不能接受了,但是这个看起来就比上面那个高级很多,因为我们能求出整张图上每个点能到达的所有点,这个是上面做不到的,而且每次修改只会改一条边,所以图不会产生太大的变化

这时候就感觉应该是分块了,我们把每 BB 个询问放到一块做,设这 BB 个操作里面涉及到的点为关键点,涉及到的边为关键边,发现我们就是问关键点的连通性,我们对于每个点维护一个关键点的 bitsetbitset ,表示这个点能到达的关键点,通过黑色的非关键边跑拓扑排序求出,这样就在不考虑关键边的情况下建出了不含关键边的关键点新图,因为我 bitsetbitset 只维护关键点,所以复杂度就是 O(mBωq)O(\frac{mB}{\omega}q)

先不管关键边,思考怎么查询,直观想法是继续拓扑排序,但是这样没有拓展性,因为我不可能建出新图后递归上面那坨答辩算法,因为万一是我建出来的就是拓扑图就寄了不能递归了,所以考虑一开始就提出的 bfsbfs ,发现现在的图很小了,只有 BB 个点 B2B^2 条边,直接跑复杂度是 O((B+B2)q)O((B+B^2)q) 的。

现在来分析一下复杂度,将上面的答辩加起来是 O(qB(n+m+mBω)+(B+B2)q)O(\frac{q}{B}(n+m+\frac{mB}{\omega})+(B+B^2)q) ,化简一下是 O(mqω+qB(n+m)+B2q)O(\frac{mq}{\omega}+\frac{q}{B}(n+m)+B^2q),根号平衡一下 BB 发现大概是 (n+m)13(n+m)^{\frac{1}{3}} ,然后就结束了……吗?

算一下复杂度大概是 6e86e8 左右,然后我们就开心的写,然后就 TT

发现有一个神奇的东西,用 bitsetbitset 优化 bfsbfs 可以做到 O(n+n2ω)O(n+\frac{n^2}{\omega}) ,现在复杂度就是 O(mqω+qB(n+m)+B2ωq)O(\frac{mq}{\omega}+\frac{q}{B}(n+m)+\frac{B^2}{\omega}q) 了,复杂度大概是 2.5e82.5e8 ,我也不知道,反正就是能过了

gym105065B. Call Me Call Me

15s 时限我跑了14476 ms。

lxl 讲的


shabby ds
http://lnyxqwq.github.io/2023/08/15/shabby ds/
作者
lnyx
发布于
2023年8月15日
许可协议