并查集学习笔记
并查集相关习题
五花酱
这个作者很懒,什么都没留下…
展开
-
洛谷P1991 无线通讯网
洛谷P1991 无线通讯网题目链接题目描述国防部计划用无线网络连接若干个边防哨所。2 种不同的通讯技术用来搭建无线网络;每个边防哨所都要配备无线电收发器;有一些哨所还可以增配卫星电话。任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有卫星电话)均可以通话,无论他们相距多远。而只通过无线电收发器通话的哨所之间的距离不能超过 D,这是受收发器的功率限制。收发器的功率越高,通话距离 D 会更远,但同时价格也会更贵。收发器需要统一购买和安装,所以全部哨所只能选择安装一种型号的收发器。换句话说,每一对哨所之原创 2020-11-30 14:07:52 · 377 阅读 · 0 评论 -
[JSOJ2010]部落划分
[JSOJ2010]部落划分题目链接题目描述聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。只是,这一切都成为谜团了——聪聪根本就不知道部落究竟是如何分布的。不过好消息是,聪聪得到了一份荒岛的地图。地图上标注了 nn 个野人居住的地点(可以看作是平面上的坐标)。我们知道,同一个部落的野人总是生活在附近。我们把两个部落的距离,定义为部落中距离最近的那两个居住点的距离。聪聪还获得了一个有意义的原创 2020-11-30 12:12:59 · 206 阅读 · 0 评论 -
最小生成树-Kruskal
最小生成树-Kruskal算法Kruskal 算法描述Kruskal算法是基于贪心的思想得到的。我们把所有的边按照权值从小到大排列,接着按照顺序选取每条边,如果这条边的两个端点不属于同一集合,那么就将它们合并,直到所有的点都属于同一个集合位置。而可以用并查集来将端点合并到一个集合内。因此可以说,Kruskal算法是基于并查集的贪心算法。Kruskal算法编程有以两个关键技术:对边进行排序:可以用STL的sort()函数,排序后,依次把最短的边加入到T中判断圈,即处理连通性问题。这个问题用并查集简原创 2020-11-29 15:19:34 · 183 阅读 · 0 评论 -
洛谷P1551
洛谷P1551 亲戚 【并查集】题目链接题目背景若某个家族人员过于庞大,要判断两个人是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。题目描述规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。输入格式第一行:三个整数n,m,p,(n<=5000,m<=5000,p<=5000),分别表示有n个人,m个亲戚关系,询问p对亲戚关系。以下m行:每行两个数Mi,Mj,1&l原创 2020-11-29 14:04:38 · 86 阅读 · 0 评论 -
并查集
并查集并查集(Disjoint Set)主要用于处理一些不相交集合的合并问题。经典的例子有连通子图、最小生成树Kruskal算法和最近公共祖先等。应用背景例如:在一个城市中有n个人,他们分成不同的帮派;给出一些人的关系,问有多少个帮派,每人属于哪个帮派。并查集:将编号分为1~n的n个对象划分为不相交集合,在每个集合中,选择其中某个元素代表所在集合。在这个集合中,并查集的操作有初始化、合并、查找并查集操作的简单实现初始化//初始化void init_set(){ for(int i=原创 2020-11-29 13:02:42 · 160 阅读 · 0 评论