追星赶月莫停留,平芜尽处是春山.|

CheZiHe929

园龄:1年10个月粉丝:9关注:4

线段树进阶

P5787 二分图 /【模板】线段树分治

普通二分图:染色

染色无法扩展,先考虑加边

如果两点在同一联通块内:加边只需要考虑连边的两个点颜色是否相同

如果不在同一联通块内,第一次加边为 YES,合并联通块,接下来的操作同上

再考虑删边

线段树分治思想

解决问题:容易插入,难删除,且插入顺序不影响结果

如果一个图是二分图,当且仅当它不是奇环;如果没有奇环,则一定是二分图

把在 l 插入、在 r 删除理解为在 [l,r] 存在

暴力做法:每一个时间刻都是空图,分别插入此时存在的边

并查集判断奇环,对于每个点 i 建立一个虚点 n+iuv 的连边变为 uv+nvu+n,此时只需判断 uu+n 是否联通,如果联通则为二分图,否则不是二分图

把一个线段存在的时间挂在线段树上

既不能做删除操作,又想优化复杂度做继承操作(当前时间点继承上一个时间点的操作)

一个节点继承其父亲的情况,可以做到不需要删除

但是需要 dfs,此时又不可避免的回溯 return,即仍然需要删除

考虑规避掉删除,和之前的删除的区别是,此次删除是可撤销的

  1. 不想要删除,将删除变为插入和撤销

  2. 插入:将时间段扔到类似线段树的分治结构

  3. 撤销:在分治结构上 dfs,进行撤销操作

我们需要一个栈来记录并查集的历史情况,最后撤销即可

posted @   CheZiHe929  阅读(20)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起