首页 > 其他分享 >线段树进阶

线段树进阶

时间:2024-06-23 09:32:25浏览次数:3  
标签:二分 联通 进阶 删除 线段 撤销 插入

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

普通二分图:染色

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

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

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

再考虑删边

线段树分治思想

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

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

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

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

并查集判断奇环,对于每个点 \(i\) 建立一个虚点 \(n+i\),\(u\) 到 \(v\) 的连边变为 \(u\) 到 \(v+n\) 和 \(v\) 到 \(u+n\),此时只需判断 \(u\) 和 \(u+n\) 是否联通,如果联通则为二分图,否则不是二分图

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

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

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

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

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

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

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

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

问题在于并查集如何撤销路径压缩的操作,并查集是不可撤销的,这个性质取决于其时间复杂度

标签:二分,联通,进阶,删除,线段,撤销,插入
From: https://www.cnblogs.com/CheZiHe929/p/18263089

相关文章

  • 线段树进阶 学习笔记
    线段树合并学习笔记线段树分治P5787考虑怎么判断二分图。先考虑弱化的版本。不考虑删边加边,则可以直接黑白染色。考虑只加边,不删边,分类讨论:注意到对于同一个连通块,一共只有两种染色方式。加的边在两个连通块之间,一定是Yes,并确定了两个连通块的染色方案。加的边在连通......
  • Python编程学习进阶书籍
    1、Python编程从入门到实践第2版本书内容分为“基础知识”和“项目”两部分。读完本书,读者不仅能快速掌握编程基础知识,还能编写出解决实际问题的代码并开发复杂的项目。第2版沿袭第1版讲解清晰透彻、循序渐进的特点,并全面升级。第一部分“基础知识”新增SublimeText、f字符......
  • 【C#进阶】单元测试_2024-06-22
    单元测试什么是单元测试?想象一下,你在做一道大菜,每种食材的准备就是一个个小任务。单元测试就像是在烹饪前检查每样食材是否新鲜、切割是否恰当。在编程中,一个“单元”通常指的是代码中的最小可测试部分,比如一个方法。单元测试就是编写一小段代码,专门用来检查这个方法是否按预期......
  • 【C++进阶学习】第三弹——菱形继承和虚拟继承——菱形继承的二义性和数据冗余问题
    继承(上):【C++进阶学习】第一弹——继承(上)——探索代码复用的乐趣-CSDN博客继承(下):【C++进阶学习】第二弹——继承(下)——挖掘继承深处的奥秘-CSDN博客前言:在前面,我们已经讲过继承的相关知识,今天我们来将一个由继承拓展出来的很重要的知识,那就是——菱形继承和虚拟继承及相关知......
  • 【C#进阶】多线程和异步编程_2024-06-22
    关于多线程和异步编程简单来说,就是多线程并行执行任务提速,异步编程等待不浪费资源,并发集合确保数据访问安全,三者合力提升程序效率与反应能力。1.理解线程想象一下,你在厨房做饭,同时需要洗菜、切菜、炒菜。如果你一个人来做,就需要在这些任务之间来回切换,这很慢。但如果请几个朋友......
  • 【C#进阶】LINQ和数据库操作_2024-06-22
    当我们踏入现代软件开发的世界,高效地管理和操作数据成为了编程的核心技能之一。让我们一步步来,用最直白的语言讲解这些与数据库操作和LINQ相关的知识点。LINQand数据库操作LINQ(LanguageIntegratedQuery,语言集成查询)是C#中一种强大而灵活的查询技术,它允许你以统一的方式查询......
  • 阶段一:Java基础进阶期末题型
    目录前言第一题第二题第三题第四题第五题第六题前言java基础进阶结课期末题第一题需求某小型商城系统的订单信息在素材下的orders.xml文件中,现在要求把xm!中的订单信息,封装成一个一个的订单对象,将订单对象保存到ArrayList集合中。具体功能点要求1)定义订单类......
  • 【C#进阶】高级面向对象特性_2024-06-22
    一、概念1.高级面向对象特性面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。这些对象可以包含数据和行为。高级面向对象特性包括:封装:把数据和操作这些数据的代码打包在一起,不让外部直接访问数据,而是通过方法来操作。继承:允许新创建的类(子类)继承现有类(父类)的属性和......
  • 【C#进阶】高级数据结构和算法_2024-06-22
    当我们深入到编程的世界,我们会发现,掌握高级数据结构和算法就像是拥有了一套高级工具箱,它们能帮助我们更高效、更优雅地解决问题。今天,我们就来一探究竟,看看这些高级工具是如何工作的。首先,让我们来谈谈高级数据结构。数据结构就像是我们用来存放东西的容器,高级数据结构就是一些......
  • SWAT模型【建模方法、实例应用、高级进阶技能】
                 第一部分:SWAT模型实践部分一SWAT模型及应用介绍1.1面源污染概要            1.2SWAT模型及应用1.3SWAT模型原理       1.4SWAT模型输入文件1.5 ArcGIS与SWAT关系二SWAT模型中GIS必备技术......