2022/2/15
并查集 Disjoint Set "不相交的集合"
将编号分别为1...N的N个对象划分为不相交集合,在每个集合中,选择其中某个元素代表所在集合
常见两种操作:
1. 合并两个集合
2. 查找某元素属于哪个集合
查找元素属于哪个集合(查找简单)
合并两个集合(merge合并)(合并复杂)
查找元素属于哪个集合(查找复杂)
合并两个集合(合并简单)
为了避免合并的时候最坏情况,进行优化
例1:2018浙大考研复试
集合数-1(or孤立子图数-1)
用集合数讨论,就是因为每个点有标号,找最小的代表集合,因此并不是每个点都等价的,通过点的大小可以确定出上下级,进而拎出来一条树,而不是一张有环的图(尽管确实有环,但是并不需要考虑进去。只考虑环的一个子图树就行了)
最小生成树
生成树:一个图包含了一个图的所有n个顶点,且只有n-1条线,则成为生成树
最小生成树:边的权值和最小
MST:minim spanning tree
性质:对于一个连通图,至少存在一颗最小生成树,包含最短的一条边
证明:
1. 反证法,假设所有的最小生成树都不包含最短的这条边l,设这条边连接的两个顶点为A,B
2. 现在把l这条边加上,随便删去其他以A或B为顶点的任何一条边,总权重和不增
3. 因为无环,且有n个顶点,n-1条边,故仍然为联通的树,新树比旧树更优且包含最短一条边
4. 矛盾,假设不成立;因此对于一个连通图,至少存在一颗最小生成树,包含最短的一条边