标签:一个 inline 出现 遍历 节点 lct cto 复杂度 tps
离线分治来解决一类问题,如二分图
二分图显然可以用扩展域的并查集来实现,如果在线直接扫一遍的话, 发现边消失时撤销的操作并不是很好做(LCT大法吼啊),但如果撤销上一步操作就不是很难了, 只需要按秩合并,再搞一个栈来维护操作就行了
线段树分治就不知道高明到哪里去了, 在时间轴上建一颗线段树, 每个节点挂个vector, 将一条边出现的时间像区间加一样分成\(log_k\)个区间, 加在对应节点的vector上。
最后从线段树的根节点开始,dfs向下遍历, 每到一个节点,把它挂着的操作都用并查集做一下,到每个节点判断一下有没有奇环, 有的话就已经不用再往下走了,到叶子节点说明它是二分图,回溯时撤销上一步操作。
时间复杂度: 每个操作被分为\(log_k\)个操作 ,而一共有\(nlog_k\)个操作, 按秩合并复杂度为\(log_n\), 所以总复杂度为\(nlog_klog_n\)
标签:一个 inline 出现 遍历 节点 lct cto 复杂度 tps
原文地址:https://www.cnblogs.com/Hs-black/p/12271675.html