码迷,mamicode.com
首页 > 其他好文 > 详细

线段树分治

时间:2020-02-07 01:21:06      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:一个   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!