import java.util.Arrays;

// https://en.wikipedia.org/wiki/Prim%27s_algorithm
public class Prim {

	public static long mstPrim(int[][] d) {
		int n = d.length;
		int[] prev = new int[n];
		int[] dist = new int[n];
		Arrays.fill(dist, Integer.MAX_VALUE);
		dist[0] = 0;
		boolean[] visited = new boolean[n];
		long res = 0;
		for (int i = 0; i < n; i++) {
			int u = -1;
			for (int j = 0; j < n; j++) {
				if (!visited[j] && (u == -1 || dist[u] > dist[j]))
					u = j;
			}
			res += dist[u];
			visited[u] = true;
			for (int j = 0; j < n; j++) {
				if (!visited[j] && dist[j] > d[u][j]) {
					dist[j] = d[u][j];
					prev[j] = u;
				}
			}
		}
		return res;
	}

	// Usage example
	public static void main(String[] args) {
	}
}
