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).