//注意边的数组要平方,简单并查集 #include<bits/stdc++.h> using namespace std; int n, ans, tot; int f[10010]; struct node{`这里写代码片` int u, v, c; } edge[10010]; int find(int x){ if(f[x] == x) return x; return f[x] = find(f[x]); } bool cmp(node x, node y){ return x.c < y.c; } void kruskal(){ sort(edge+1, edge+tot+1, cmp); for(int i = 1; i <= n; i++) f[i] = i; for(int i = 1; i <= tot; i++){ int fx = find(edge[i].u); int fy = find(edge[i].v); if(fx == fy) continue; ans += edge[i].c; f[fx] = fy; } } int main(){ cin >> n; for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++){ int x; cin >> x; if(i >= j || !x) continue; edge[++tot].u = i; edge[tot].v = j; edge[tot].c = x; } kruskal(); cout << ans << endl; ret