zoukankan      html  css  js  c++  java
  • 线段树分治

    线段树分治

    离线分治来解决一类问题,如二分图

    二分图显然可以用扩展域的并查集来实现,如果在线直接扫一遍的话, 发现边消失时撤销的操作并不是很好做(LCT大法吼啊),但如果撤销上一步操作就不是很难了, 只需要按秩合并,再搞一个栈来维护操作就行了

    线段树分治就不知道高明到哪里去了, 在时间轴上建一颗线段树, 每个节点挂个vector, 将一条边出现的时间像区间加一样分成(log_k)个区间, 加在对应节点的vector上。

    最后从线段树的根节点开始,dfs向下遍历, 每到一个节点,把它挂着的操作都用并查集做一下,到每个节点判断一下有没有奇环, 有的话就已经不用再往下走了,到叶子节点说明它是二分图,回溯时撤销上一步操作。

    时间复杂度: 每个操作被分为(log_k)个操作 ,而一共有(nlog_k)个操作, 按秩合并复杂度为(log_n), 所以总复杂度为(nlog_klog_n)

  • 相关阅读:
    Django的一点基本知识点
    python函数定义及作用域
    爬取妹子图片
    mysql常用命令大全
    python扫面端口
    python中重要的基础概念
    pexpect模块获取root密码
    mysql
    requests库
    C#中使用SQLite数据库简介(上)
  • 原文地址:https://www.cnblogs.com/Hs-black/p/12271675.html
Copyright © 2011-2022 走看看