Kruskal
Time O(E log E) Space O(n)Sort by cost; union endpoints in different sets; if fewer than n − 1 edges are taken, return −1.
import java.util.*;
class Solution {
private int[] parent;
public int minimumCost(int n, int[][] connections) {
Arrays.sort(connections, Comparator.comparingInt(c -> c[2]));
parent = new int[n + 1];
for (int i = 0; i <= n; i++) parent[i] = i;
int total = 0, used = 0;
for (int[] c : connections) {
int a = find(c[0]), b = find(c[1]);
if (a == b) continue;
parent[a] = b;
total += c[2];
if (++used == n - 1) return total;
}
return n == 1 ? 0 : -1;
}
private int find(int x) {
while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; }
return x;
}
}Verdict: Direct.