随笔分类 -  数据结构——并查集

摘要:Description 给定一张n个点,m条边的无向图,求出边权最大值和最小值差值最小的生成树 Solution LCT+并查集 按照最小生成树的思路,先将边按照边权从小到大排序,然后顺序考虑每一条边 如果当前这条边的两个端点没有连通,那么直接连通 如果两个端点已经连通,我们加上这条边会形成一个环, 阅读全文
posted @ 2019-08-14 20:38 AD_shl 阅读(270) 评论(0) 推荐(0)
摘要:一道感觉不错的并查集的题目 我们先将每一组矛盾关系按照冲突值从大到小排序,然后顺序扫描一遍,让冲突值大的两个人尽可能不在一个监狱里,如果不能满足,那么答案就是这组关系的矛盾值。如果所有的矛盾都不会发生,那么答案就是0. 之后我们建立并查集,另外定义一个辅助的数组d表示每一个人的一个敌人。我们扫描每一 阅读全文
posted @ 2019-05-25 12:52 AD_shl 阅读(210) 评论(0) 推荐(0)
摘要:一道“扩展域”并查集的题目,我们把每一个点拆分成三个域:同类、食物、天敌。 我们假设x的同类域为x,食物域为x+n,天敌域为x+n+n。假设x与y是同类,那么说明x+n与y+n是同类,x+n+n与y+n+n是同类。 假设x吃y,那么x+n与y是同类,x+n+n与y+n是同类,x与y+n+n是同类。 阅读全文
posted @ 2019-05-02 22:56 AD_shl 阅读(364) 评论(0) 推荐(0)
摘要:这是一道带权并查集的题目。 我们维护三个数组,f[x]表示节点x所在集合的代表元素(相当于合并之后的树根),size[x]表示以x为代表元素的集合的大小是多少(相当于一列战舰的数量),d[x]表示在这一列战舰中,x前面的战舰有多少。 因此对于每一次询问,答案就是|d[x]-d[y]|-1. 我们怎样 阅读全文
posted @ 2019-05-02 22:33 AD_shl 阅读(257) 评论(0) 推荐(0)
摘要:读完题,我产生了一个显然的想法:先求出这张图的最大生成树,然后再dfs一遍求出联通块的个数(图可能不连通),之后这张图变成了一棵树,题目就变成了在一棵树上给定一条路径,求这条路径上最小的边权是多少。(-1的情况可以通过并查集直接判断)。 考虑一条路路径(x,y),我们可以把它拆分成(x,lca(x, 阅读全文
posted @ 2019-05-02 15:27 AD_shl 阅读(259) 评论(0) 推荐(0)
摘要:这是一道最小生成树相关的题目 题目要求在一棵最小生成树的基础上增加一些边变成一张完全图,但是这张图的最小生成树仍然是原来的树,求增加的边的边权的和最小是多少。 我们首先将边按照边权升序排列,像kruskal一样,之后我们扫描每一条边,设当前的边(x,y,z),x所在的并查集为Sx,y所在的并查集为S 阅读全文
posted @ 2019-04-30 23:21 AD_shl 阅读(172) 评论(0) 推荐(0)