SOJ1694 题解
题意
给定一张有 \(n\) 个点,\(m\) 条边的无向图,有 \(q\) 次询问,每次询问删掉第 \([l,r]\) 条边后剩下的图是否存在奇环。
\(1 \le n,m,q \le 2 \times 10^5\)
题解
今天考试遇到的整体二分好题。其实也是一个经典板子,我不会做可能是因为太菜了QAQ
有一个显然的想法是:对于每个 \(l\),求出最小的 \(r\) 使得删掉 \([l,r]\) 后不存在奇环。将这个数组记为 \(res\)。则删掉 \([l,r]\) 后存在奇环当且仅当 \(r \ge res[l]\)。
注意到 \(res\) 是单增的。于是尝试使用双指针优化。但常见的奇环的判定方式是并查集,不支持动态维护连通性,故使用整体二分。( \(\operatorname{LCT}\) 支持,那么或许可以用其代替并查集实现双指针?没试过)
为了能“继承”并查集的信息以达到优化时间复杂度的目的,我们将状态设计为:\(solve(l,r,L,R)\) 表示当前考虑 \([l,r]\),其答案均在 \([L,R]\) 内,且此时 \([1,l-1] \cup [R+1,m]\) 已加入并查集。
我们先求出 \(l,r\) 中点 \(m\) 的答案 \(p\),这个不难。由于单调性,\([l,m-1] \in [L,p]\),\([m+1,r] \in [p,R]\)。于是就可以递归往下做了。
由于上述操作的复杂度为 \(O((r-l)\log n)\)(这里不妨设 \(R-L\) 与 \(r-l\) 同阶,原因之后讲),故总复杂度 \(O(n \log^2 n)\)。
为何同阶:因为递归的深度由 \(l,r\) 决定,而 \(m\) 是一定取在中点的,故深度为 \(O(\log n)\)。同一深度下所有 \(R-L\) 和为 \(n\),故均摊可得同阶。