The algorithm
Sort edges by weight. For each edge: if endpoints not connected, add to MST. Union them. Repeat.
Advertisement
Union-Find (DSU)
int[] parent = new int[n];
for (int i = 0; i < n; i++) parent[i] = i;
int find(int x) {
while (parent[x] != x) x = parent[x];
return x;
}
boolean union(int x, int y) {
int rx = find(x), ry = find(y);
if (rx == ry) return false;
parent[rx] = ry;
return true;
}Advertisement
Kruskal
Arrays.sort(edges, (a, b) -> a[2] - b[2]);
long total = 0; int used = 0;
for (int[] e : edges) {
if (union(e[0], e[1])) {
total += e[2]; used++;
if (used == n - 1) break;
}
}Complexity
O(E log E) sort + O(E α(V)) union-finds ≈ O(E log E).