絶対に簡単な方法があります。すべてのノードビジネスを忘れてください。ノードは単なる概念的なものであり、文字通り実装する必要はありません。実装しない方が簡単です。
必要なのは、2 つの int の配列だけです。1 つは親を格納し、もう 1 つはランクを格納します。したがって、一種の擬似コードでは、次のようになります。
disjoint_set {
int[] parent, rank;
makeset(int n)
{
rank = new int[n];
parent = new int[n];
for(int i = 0; i < n; i++)
parent[i] = i;
}
int find(int i)
{
if (parent[i] != i)
parent[i] = find(parent[i]);
return parent[i];
}
void union(int x, int y)
{
x_root = find(x);
y_root = find(y);
if (x_root != y_root) {
if (rank[x_root] < rank[y_root])
parent[x_root] = y_root;
else if (rank[x_root] > rank[y_root])
parent[y_root] = x_root;
else {
parent[y_root] = x_root;
rank[x_root]++;
}
}
}
}