并查集
并查集
查询和合并两个元素是否在一个集合内。
类似一个树形的结构,每一个都存他的父节点,每一个集合都有一个代表元素,也就是根节点,这个结点代表了这个集合。
合并:普通合并每次都可以让他等于他的父节点,但是这样连出来的是一个距离根节点很长的树,查询的时候就比较慢,所以可以路径压缩,回溯的时候让他指向他的祖宗节点,这样就是一个路径比较短的树了。
带权:除了维护是否同一集合以外,再给每一个结点一些别的信息并加以维护
带边权:对于关系加了一些修饰,一般是维护和根节点的信息
带扩展域:维护的不是元素了,而是一些关系
关系具有传递性,而且具有对称性
作用:
- 维护集合之间的关系
- 通过拆点,给点附加信息,进而维护不同的信息
- 通过维护点与根结点的关系,进而维护边的关系,也就是维护了边权
- 通过另开一维空间来维护,不同的空间的点代表了不同的性质,如果这些性质有交集就合并。