首页 > 其他分享 >新高一暑假第一期集训恢复性训练【数据结构-晚测】(并查集)(补)

新高一暑假第一期集训恢复性训练【数据结构-晚测】(并查集)(补)

时间:2024-10-23 21:10:01浏览次数:7  
标签:晚测 查集 权值 集合 数据结构 集训

新高一暑假第一期集训恢复性训练【数据结构-晚测】(并查集)(补)


[CF1290C] Prefix Enlightment

带权扩展域并查集

任意三个子集的交集为空集,显然,一个点最多只能在两个集合中出现,这样所有集合的大小之和是 \(\Theta(n)\) 的。

一个在两个集合中出现的点ii相当于连接了 \(2\) 个集合 \(u_i\) 和 \(v_i\),这是一个图。

不妨把整张图染成选和不选两种颜色。

若 \(S_i=0\),则 \(i\) 的状态要改变,可以发现,\(u_i\) 和 \(v_i\) 一定异色。

若 \(S_i = 1\),则 \(i\) 的状态不变,可以发现,\(u_i\) 和 \(v_i\) 一定同色。

接下来就用扩展域并查集来做,一个颜色的点的权值是 \(0\),另一个颜色的点的权值是 \(1\),取并查集合并后两个集合的权值的最小值即为答案。

如果 \(i\) 在任何一个给出的集合中都未出现过,则我们无法去修改 \(Si\),但因为题目保证有解,所以不用去管。

但若某个 \(i\) 只在一个集合中出现,怎么去强制选点?领略到了一个神奇的做法,可以建一个点权为无穷大的虚点,把该点和虚点连接。

标签:晚测,查集,权值,集合,数据结构,集训
From: https://www.cnblogs.com/Leirt/p/18498371

相关文章

  • [数据结构] 删除单链表中最小值结点(C语言版本)
    如果对单链表基本操作或概念不理解的可以跳转:单链表的基本操作(C语言版)-CSDN博客https://blog.csdn.net/m0_74181956/article/details/143082621?spm=1001.2014.3001.5501算法思想:如图所示:定义指针p为L的第一个结点,pre为L的头结点,min为记录每次遍历的最小值结点,minpre为记......
  • 数据结构C语言版_队列笔记||已测试所有代码均可运行
    队列源文件使用markdown编写,CSDN文章发布好像有部分语法改变。每一部分我都有加一个返回标题好像不能使用了。但是CSDN自带一个目录总结,你们无视掉我写的目录直接用CSDN的吧。总结笔记不易,如果有帮助到你希望点个赞。所有代码均已在VScode中运行过,部分代码块因为格式原因......
  • 【数据结构与算法】之龟兔赛跑算法
    目录一、龟兔赛跑算法1.1阶段11.2阶段21.3为什么呢?二、判断是否有环2.1问题描述2.2示例2.3 代码实现三、找到环入口3.1问题描述3.2示例3.3代码实现总结本文主要介绍以环形链表相关的算法,主要采用Java语言实现,这类算法又称Floyd'sTortoiseandHare......
  • 数据结构-----------栈和队列后续
    1队列1.1概念与结构概念:只允许在一端进行插入数据操作,在另一端进行删除元素特殊的线性表,队列具有先进先出的性质入队列:进行插入操作的的一端叫做队尾出队列:进行删除操作的一端叫做队头下面我们来看一下队列的实现队列其实跟单链表是差不多的只不过队列只允许在队尾插入数......
  • 【数据结构】队列(环形缓冲区)的实现
    在学习驱动的过程中,接触到了环形缓冲区的概念,发现这个缓冲区和数据结构中的队列具有惊人的相似之处,因此借此来复习相关知识如果应用层来不及读取数据时,我们可以先将数据放入环形缓冲区中用来记录数据,防止数据丢失。当然,缓冲区越大,那么可以缓存的数据就越多。1.队列的定义队......
  • 【数据结构与算法】之链表经典算法大集合
    本文主要内容是几个关于链表的初级经典算法的分享,都采用Java语言实现,话不多说,立马开始!注意:以下代码有关链表的算法实现均基于以下链表节点类://链表节点类publicclassListNode{intval;ListNodenext;ListNode(){}ListNode(intval){this.val=v......
  • Ruby数据结构介绍
    Ruby中的String 对象存储并操作一个或多个字节的任意序列,通常表示那些代表人类语言的字符。最简单的字符串是括在单引号(单引号字符)内。在引号标记内的文本是字符串的值:'ThisisasimpleRubystringliteral'如果您需要在单引号字符串内使用单引号字符,那么需要在单引号......
  • 六种概率数据结构的详细解释及应用场景
    1/BloomFilter用途:测试一个元素是否可能在一个集合中。原理:BloomFilter使用多个哈希函数将元素映射到一个位数组上。如果所有对应的位都被设置为1,则认为该元素可能在集合中。优点:非常节省空间,因为不需要存储实际的元素,只需存储位图信息。应用:在数据库查询优化、网页缓......
  • 【趣学C语言和数据结构100例】
    #1024程序员节|征文#【趣学C语言和数据结构100例】问题描述56.设将n(n>1)个整数存放到区带头结点处单链表乚中,设计算法将L中保存的序列循环石移k(0<k<n)个位置。例如,若k=1,则将链表(0,1,2,3}变为{3,0,1,2}57.设有一个带头结点的非循环双链表L,其每个结点中除有pre、da......
  • 【Python-AI篇】数据结构和算法
    1.算法概念1.1什么是数据结构存储,组织数据的方式1.2什么是算法实现业务目的的各种方法和思路算法是独立的存在,只是思想,不依附于代码和程序,可以使用不同语言实现(java,python,c)1.2.1算法的五大特性输入:算法具有0个或多个输入输出:算法至少有1个或多个输出有穷性:算法......