上午9点~12点
写项目
下午3点~5点30
找博客,查找相似项目博客,借鉴并参考
晚上7点~9点30
刷落下的题,重新学习并查集,并查集:
-
定义:
并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。比如说,我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等。 -
主要构成:
并查集主要由一个整型数组pre[ ]和两个函数find( )、join( )构成。
数组 pre[ ] 记录了每个点的前驱节点是谁,函数 find(x) 用于查找指定节点 x 属于哪个集合,函数 join(x,y) 用于合并两个节点 x 和 y 。 -
作用:
并查集的主要作用是求连通分支数 -
find函数的定义与实现:就是用来查找头头的
int find(int x){
if(pre[x] == x)
return x;
else return pre[x] = find(pre[x]);
}
- jion函数的定义与实现:加入,认老大的
if(fx != fy)
pre[fx]=fy;
- 总结:用集合中的某个元素来代表这个集合,则该元素称为此集合的代表元;
一个集合内的所有元素组织成以代表元为根的树形结构;
对于每一个元素 x,pre[x] 存放 x 在树形结构中的父亲节点(如果 x 是根节点,则令pre[x] = x);
对于查找操作,假设需要确定 x 所在的的集合,也就是确定集合的代表元。可以沿着pre[x]不断在树形结构中向上移动,直到到达根节点。
因此,基于这样的特性,并查集的主要用途有以下两点:
维护无向图的连通性(判断两个点是否在同一连通块内,或增加一条边后是否会产生环);
用在求解最小生成树的Kruskal算法里。
晚上9点30~10点
每日总结