专栏文章

浅谈 Kosaraju 的一类运用

算法·理论参与者 3已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@mj09bed9
此快照首次捕获于
2025/12/11 01:02
2 个月前
此快照最后确认于
2026/02/13 01:28
7 天前
查看原文

是的,这玩意是有用的。
我们现在要处理一个这样的问题:一张图,有 nn 个点,mm 组边,每组边形如 (u,l,r)(u,l,r),表示对于 v[l,r]v\in[l,r]uu 有通向 vv 的边,有 qq 次询问,每次询问形如一个点是否能到达另外一个点。
我们当然可以线段树建图之后跑 Tarjan,但是常数太大了,有没有常数更小,甚至复杂度更好的做法呢?
有的有的。我们考虑直接大力 Kosaraju,那么问题变成了给你若干个区间 [li,ri][l_i,r_i],要你遍历这些区间,每个被区间覆盖到的点至少遍历一次。
直接遍历记录 vis 你肯定就直接 O(n2)O(n^2) 了,但是我们考虑并查集记录 vis,这就可以从一个点 O(α(n))O(\alpha(n)) 的查找到下一个没有遍历的点了?
事实上不加按秩合并也是对的,证明见 OI-wiki,我怕不会。
那么我们就可以在 O(nα(n))O(n\alpha(n)) 之内解决这个问题了。
例题,二分一下建立 2-SAT 就变成上面的问题了。
例题二维版本,这道题我会在下篇文章讲,因为有一些问题没有解决。

评论

2 条评论,欢迎与作者交流。

正在加载评论...