随笔分类 - 图论——并查集
摘要:题目链接:https://www.acwing.com/problem/content/241/ 给出长度n,和m条记录,每条记录中说明一个区间中1的数量,其中序列是01序列,问到哪一个是最后一个正确的。 可以通过并查集解决,用前缀异或和作为一段区间中1的个数的象征。可以通过“边带权”的方式计算也可
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/240/ 题目给出初始时刻的n个队伍,每个队伍只有一个对应编号的i,操作有两种,一种是将第i列的接在第j列后面,一种是查询两个人是否在同一列,在同一列的话给出两者之间隔了多少人。 由于每一列都是一棵树,所以可以通
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/239/ 给出n个变量之间的等式和不等式关系,判断是否存在错误,由于等号具有传递性,不等号不具有,所以可以考虑使用并查集。并查集可以维护图中结点的连通性,在这个问题中得以体现。 其次,这个问题的变量数量少,但是索
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/list?keyword=1525&page=1 题目给出一些点对之间的权值,要求把点对分到两个集合之中,使得两个集合中的最大边的值最小。我们考虑到将点对分成两个集合可以用并查集的分集合方法得到,1-n表示的是一个集合,n+
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1197 题目给出一些点之间边,然后要摧毁某些结点,问每一次摧毁之后的图的连通分量数量。我们考虑到判连通分量的数量只要扫一遍并查集的根节点就可以,所以考虑用这种数据结构来检查连通分量的数量。其次,并查集中删除结点的消耗是非
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1829 并查集的一个应用,就是检测是否存在矛盾,就是两个不该相交的集合有了交集。本题就是这样,一种虫子有两种性别,每次m次操作,每次给出(a,b),如果a和b是同性别就出现了错误,也就是说出现了判断它有两
阅读全文
摘要:题目链接:http://poj.org/problem?id=1703 这道题和食物链那道题有异曲同工之处,都是要处理不同集合之间的关系,而并查集的功能是维护相同集合之间的关系。这道题中有两个不同的集合,朴素并查集只能查询两者是否属于同一个集合,扩展并查集可以建立多个集合之间的关系。 本题我看了很多
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Pku/1182/ 题意:给出动物之间的关系,有几种询问方式,问是真话还是假话。 定义三种偏移关系: x->y 偏移量0时 x和y同类 x->y 偏移量1时 x被y吃 x->y 偏移量2时 x吃y 定义 rela[x]=rx
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/3038/ 参考博客: https://blog.csdn.net/weixin_44580710/article/details/86668200?depth_1-utm_source=distribute.pc_
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/3367/ 题目要求一个连通图的最大伪森林,伪森林是一个最多有一个回路的图。我们只要用Kruskal最大生成树的策略就可以,给根节点表上记号表明这棵树有没有负环。其实也有一些贪心的思想。 代码如下: 1 #inclu
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1272/ 题目要求支持两种操作,一种是合并,一种是去除一个点与其他所有点的关系,但是其他的点显然是保持着原有的关系的,涉及关系的问题我们首要想到的就是并查集。删关系的操作我们可以让这个结点指向一个从没有用过的结点就
阅读全文
摘要:题目链接: 题目给出哪些边之间有连线,问图中是否构成环,还有每两个点之间是否相通,就是问给出的这些点是否构成树,我们只要扫一遍是否边的数量加一是点的数量然后判在同一棵树中的两个点是否重复连边就可以了。其实这道题也不需要判断是否存在环,直接用树的特性就解决了。判断不重复的点的数量可用set解决。 代码
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1856/ 题目就是要求并查集中各树的大小的最大值,我们只要在根节点处存树的大小就可以,合并也是合并根节点的数,最后扫一遍即可。 代码如下: 1 #include<bits/stdc++.h> 2 using nam
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1213/ 题目给定n个点和一些边,只要两点能通过某些边相连就相通。我们只要把所有的点连成一棵树就可以,一棵树有n-1条边,每次合并两棵树的时候边都会增加一条,我们只要知道合并的次数就可以知道已经有了多少条边,并查集
阅读全文
摘要:题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1213/ 并查集是一种支持合并与查找的数据结构,在森林中进行操作,加上路径压缩,合并和查找的时间复杂度几乎都是常数。并查集最基础的作用就是建立不同的点之间的所谓的“关系”,并且查询两者是否有关系。并查集的一个特点是
阅读全文