![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
蘑菇沏茶
这个作者很懒,什么都没留下…
展开
-
1319. 连通网络的操作次数
题目描述:用以太网线缆将n台计算机连接成一个网络,计算机的编号从0到n-1。线缆用connections表示,其中connections[i] = [a, b]连接了计算机a和b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。给你这个计算机网络的初始布线connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。请你计算并返回使所有计算机都连通所需的最少操作次数。如果不可能,则返回-1 。...原创 2020-12-15 23:40:40 · 143 阅读 · 1 评论 -
并查集路径压缩的妙用
对比 结论:很明显,路径压缩可以节省向上搜索的时间。思考:在并查集中,我们并不关心,父节点是谁,我们关心的是祖宗。实现:# 迭代def find(x): while x != pre[x]: pre[x] = pre[pre[x]] x = pre[x] return x# 递归def find(x): if x != pre[x]: pre[x] = find(pre[x].原创 2020-12-15 23:23:35 · 178 阅读 · 0 评论 -
924. 尽量减少恶意软件的传播
题目描述:在节点网络中,只有当 graph[i][j] = 1时,每个节点i能够直接连接到另一个节点 j。一些节点initial最初被恶意软件感染。只要两个节点直接连接,且其中至少一个节点受到恶意软件的感染,那么两个节点都将被恶意软件感染。这种恶意软件的传播将继续,直到没有更多的节点可以被这种方式感染。假设 M(initial) 是在恶意软件停止传播之后,整个网络中感染恶意软件的最终节点数。我们可以从初始列表中删除一个节点。如果移除这一节点将最小化 M(initial),则返回...原创 2020-12-15 13:17:03 · 312 阅读 · 1 评论 -
并查集
什么是并查集:并查集是一种图结构,为了找出所有存在的关系,如图中所示,若A和B之间存在关系,B和C存在关系,那么A、B、C构成一条连通分量,这么做的目的是什么呢?我们可以假设一个场景,在日常生活中,A想和C交朋友,但是A不认识C(不存在关系),但是A认识B(存在关系),且A知道B认识C,那么A就可以通过B认识C,形成一种递推结构。数据结构中如何保存这样一组关系呢?首先A存在的是B的位置,B存储的是C的位置,那么A首先得到B的位置,然后就能确定C的位置了。通俗来说,可以理解为找祖宗。原创 2020-12-15 12:11:36 · 106 阅读 · 1 评论