首页 > 其他分享 >并查集解题思路

并查集解题思路

时间:2024-04-06 23:56:28浏览次数:20  
标签:解题 findf 查集 int 域里 集合 思路 节点

概述

并查集主要是解决以下几种问题的:

  1. 各节点之间的关系
  2. 某节点和它祖先之间的关系

种类

  1. 朴素并查集,一个集合的信息可以存储在它的祖先节点上。
  2. 带权并查集,维护的是某节点与它祖先的关系
  3. 扩展域并查集(种类并查集),本质是多开几倍空间的朴素并查集,维护的是各个阵营之间的关系,且几个域里具有对称性。形式化而言,可以把每个域看作一个平行时空,当朋友域里的我和朋友域里的他是朋友时,我和他是朋友;当朋友域里的我和敌人域里的他是朋友时,我和他是敌人。

模板

朴素并查集模板

点击查看代码
int findf(int x)
{
    if(f[x]!=x)f[x]=findf(f[x]);
    return f[x];
}

带权并查集模板

点击查看代码
int findf(int x)
{
	if(f[x]==x)return x;
	int orif=f[x];
	f[x]=findf(f[x]);
	dis[x]+=dis[orif];
	return f[x];
}

种类并查集模板

朴素并查集上多开几倍空间。

求最大连通块点数

朴素并查集,把该连通块信息算在祖先节点上,combine 时就传递祖先节点的信息。

求连通块数量

祖先节点的个数就是连通块数量,因此遍历每一个点,如果 findf(i)==inum++

套路

  1. 几个点之间可以任意交换,则他们是一个集合,常用于序列上的并查集问题。交换
  2. 带权并查集的权值取模,可以当成种类并查集来用。食物链
  3. 建立虚点,来实现两个集合合并时,不影响两个集合原来各自的操作,且后续共享操作的功能。网络分析
  4. 破坏两个节点间的关系,反向合并集合,从最后一次破坏开始,往前合并破坏的节点。星球大战
  5. 判断两种说法是否矛盾,把相同的说法加入同一个并查集里;可以在一开始时就判断矛盾,也可以在最后才判断。程序自动分析
  6. 判断图的连通性,如 Kruskal 算法。
  7. 最少的任意位置的交换次数,把要交换的东西合并成一个集合,交换次数即为 \(size-1\) 。情侣牵手
  8. 判断是否有环的存在。
  9. 超级源点,这个超级源点既可以看作是把整个集合赋某个特定的值,也可以看作是给一些满足要求的节点连边。三值逻辑被围绕的区域

标签:解题,findf,查集,int,域里,集合,思路,节点
From: https://www.cnblogs.com/zhr0102/p/18074329

相关文章

  • 并查集学习笔记
    并查集学习笔记本质上还是一个复习笔记。考虑这样一个问题:给出\(x,y\),合并\(x,y\)所在集合。给出\(x,y\),查询\(x,y\)是否在同一集合内。我们把集合当成一棵树,两个点有连边就表示他们在同一个集合内。这棵树的根节点就是这个集合的“老大”,也就是这个集合里面的......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧012-Instructions for Daily Use
    PDF格式公众号回复关键字:ZKYD012阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文章......
  • 并查集
    并查集的作用检查图中是否存在环并查集的流程设定一个集合,叫并查集往集合里面添加边,怎么添加呢?取边的起点和终点,判断两点是否都在集合里面。如果都在,则出现了环,如果不在,则将两个点放入集合中。继续添加下一条边,直到没有边。如果最后都没有找到环,就是图中不存在环。并......
  • 【华为OD机试真题】211、最优资源分配、芯片资源占用 | 机试真题+思路参考+代码分析(C
    文章目录一、题目......
  • 代码随想录 | 图论 797. 所有可能的路径(dfs) ,200. 岛屿数量 (dfs)200. 岛屿数量 (bfs)
    797.所有可能的路径https://leetcode.cn/problems/all-paths-from-source-to-target/description/List<List<Integer>>res;List<Integer>path;publicList<List<Integer>>allPathsSourceTarget(int[][]graph){res=newA......
  • Python自学:类 构造方法练习(思路打不通,还遇到赋值错乱!)
    开始学习类一个练习,就是输入学生信息,并且要用到forinput结合,构造方法等。自己思考时,这个应该先设计一个类,然后用input输入,之前练习过main架构 tools调用两个py文件相互辅助,这个是不是也是,还有全局变量,想了很多结果不是,乱的。看了课件,用到forxinrange(1,11):开......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧011-Noticeboard
    PDF格式公众号回复关键字:ZKYD011阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文章......
  • 【算法】BFS、并查集和拓扑排序
    最近刷到了两道关于图论很有意思的题目()。做法颇有相似之处,因此记录一下吧AcWing2069.网络分析标签:dfs、并查集题目描述题目大意是,有一个\(n\)个顶点的网络,初始状态图中没有边。有两种操作:操作1将节点\(a\)和节点\(b\)连接起来;操作2使节点\(p\)的值加\(t\),\(t\)值会沿着网......
  • SAP_MM模块-无价值物料管理实现思路
    无价值物料管理实现思路业务背景一:对于工具类的物料,本来想通过无物料号,收货时直接消耗在成本中心的方式来处理,这样,工程部和采购部都比较方便。但财务部提出这部分工具物料还需要进行库存管理,但不要求有库存价值,只是在规定时间内作库存盘点操作。思路1(不满足要求):无料号的费......
  • Luogu P8710 [蓝桥杯 2020 省 AB1] 网络分析 题解 [ 绿 ] [ 带权并查集 ]
    原题分析本题由于从一个节点发信息,同一个集合内的所有点都会收到信息,显然是一道要求维护各节点间关系的题,因此采用并查集的数据结构进行求解。但由于维护关系的同时还要维护权值,所以采用带权并查集,它是一种能维护某个节点与其祖宗节点之间关系的数据结构。带权并查集找父亲的......