2316. Count Unreachable Pairs of Nodes
Question
You are given an integer
n
. There is an undirected graph withn
nodes, numbered from0
ton - 1
. You are given a 2D integer arrayedges
whereedges[i] = [a<sub>i</sub>, b<sub>i</sub>]
denotes that there exists an undirected edge connecting nodesa<sub>i</sub>
andb<sub>i</sub>
.Return the number of pairs of different nodes that are unreachable from each other.
Solution
并查集,将所有元素union,然后计算每个元素所在集之外的元素和相加即可。
注意由于是无向图,因此计算加和时每两个点之间都计算了两次,因此需要将结果除以2。
路径压缩
在进行find()查找时,将经过的每一个节点设置为根节点。
这样做可以有效的降低树高,减少操作次数。
采用递归的形式实现。
按秩合并
用size[]数组记录当前位置的节点数量。
在合并两个数字时,将秩较小的数字指向秩较大的数字。
并更新根节点的size[]值。
Code
1 | class Solution { |
2316. Count Unreachable Pairs of Nodes
https://xuanhe95.github.io/2022/06/26/2316-Count-Unreachable-Pairs-of-Nodes/