import java. util. Scanner;
public class Prime {
static int [ ] [ ] G = new int [ 1000 ] [ 1000 ] ;
static int n, ans;
static int [ ] dis = new int [ 1000 ] ;
static boolean [ ] vis = new boolean [ 1000 ] ;
public static void main ( String[ ] args) {
Scanner sc = new Scanner ( System. in) ;
n = sc. nextInt ( ) ;
for ( int i= 1 ; i<= n; i++ ) {
for ( int j= 1 ; j<= n; j++ ) {
G[ i] [ j] = sc. nextInt ( ) ;
}
}
prime ( 1 ) ;
System. out. println ( ans) ;
}
public static void prime ( int s) {
for ( int i= 1 ; i<= n; i++ ) {
dis[ i] = G[ s] [ i] ;
vis[ i] = false ;
}
vis[ s] = true ;
ans = 0 ;
for ( int i= 1 ; i< n; i++ ) {
int d = 99999999 ;
int k = s;
for ( int j= 1 ; j<= n; j++ ) {
if ( ! vis[ j] && d> dis[ j] ) {
d = dis[ j] ;
k = j;
}
}
if ( k== s) return ;
ans += d;
vis[ k] = true ;
for ( int j= 1 ; j<= n; j++ ) {
if ( ! vis[ j] && dis[ j] > G[ k] [ j] ) {
dis[ j] = G[ k] [ j] ;
}
}
}
}
}
import java. util. Arrays;
import java. util. Scanner;
public class Kruskal {
static int [ ] pre = new int [ 1000 ] ;
static int n, ans, m, len;
static E[ ] e = new E [ 1000 * 1000 / 2 ] ;
public static void main ( String[ ] args) {
Scanner sc = new Scanner ( System. in) ;
n = sc. nextInt ( ) ;
m = sc. nextInt ( ) ;
for ( int i= 1 ; i<= n; i++ ) {
pre[ i] = i;
}
len = 1 ;
for ( int i= 1 ; i<= m; i++ ) {
int u = sc. nextInt ( ) ;
int v = sc. nextInt ( ) ;
int w = sc. nextInt ( ) ;
e[ len++ ] = new E ( u, v, w) ;
}
Arrays. sort ( e, 1 , len) ;
kruskal ( )
System. out. println ( ans) ;
}
public static void kruskal ( ) {
ans = 0 ;
for ( int i= 1 ; i< len; i++ ) {
int fu = find ( e[ i] . u) ;
int fv = find ( e[ i] . v) ;
if ( fu!= fv) {
ans += e[ i] . w;
pre[ fv] = fu;
}
}
}
public static int find ( int x) {
if ( x== pre[ x] ) return x;
pre[ x] = find ( pre[ x] ) ;
return pre[ x] ;
}
}
class E implements Comparable < E> {
int u, v, w;
public E ( int u, int v, int w) {
this . u = u;
this . v = v;
this . w = w;
}
@Override
public int compareTo ( E o) {
return this . w- o. w;
}
}