class Union {
private int[] nodes;
public Union(int n) {
nodes = new int[n];
for (int i = 0; i < n; i++) {
nodes[i] = i;
}
}
public void join(int a, int b) {
while (nodes[a] != nodes[nodes[a]]) {
nodes[a] = nodes[nodes[a]];
}
while (nodes[b] != nodes[nodes[b]]) {
nodes[b] = nodes[nodes[b]];
}
if (nodes[a] > nodes[b]) {
nodes[nodes[a]] = nodes[b];
} else {
nodes[nodes[b]] = nodes[a];
}
}
public boolean isLinked(int a, int b) {
while (nodes[a] != nodes[nodes[a]]) {
nodes[a] = nodes[nodes[a]];
}
while (nodes[b] != nodes[nodes[b]]) {
nodes[b] = nodes[nodes[b]];
}
return nodes[a] == nodes[b];
}
}
并查集板子
最新推荐文章于 2025-03-02 13:48:01 发布
373

被折叠的 条评论
为什么被折叠?



