data Ġclass ĠEdge ( val Ġfrom : ĠInt , Ġval Ġto : ĠInt , Ġval Ġcost : ĠLong ) Ċ Ċ class ĠD SU ( val Ġn : ĠInt ){ ĊĠĠĠ Ġvar Ġpar : ĠMutable List < Int > Ġ= ĠMutable List < Int >( n ){ Ġit Ġ} ĊĠĠĠ Ġvar Ġsz : ĠMutable List < Int > Ġ= ĠMutable List < Int >( n ){ Ġ 1 Ġ} ĊĊĠĠĠ Ġfun Ġfind ( x : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( par [ x ] Ġ!= Ġx ) Ġpar [ x ] Ġ= Ġfind ( par [ x ]) ĊĠĠĠĠĠĠĠ Ġreturn Ġpar [ x ] ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġfun Ġjoin ( ii : ĠInt , Ġjj : ĠInt ): ĠBoolean { ĊĠĠĠĠĠĠĠ Ġvar Ġi = find ( ii ); Ġvar Ġj = find ( jj ); ĊĠĠĠĠĠĠĠ Ġif ( i Ġ== Ġj ) Ġreturn Ġfalse ; ĠĊĠĠĠĠĠĠĠ Ġif ( sz [ i ] Ġ< Ġsz [ j ]){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ Ġval Ġtemp Ġ= Ġi ; Ġi Ġ= Ġj ; Ġj Ġ= Ġtemp Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsz [ i ] Ġ+= Ġsz [ j ]; ĊĠĠĠĠĠĠĠ Ġpar [ j ] Ġ= Ġi ; ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġvar Ġ( n , Ġm ) Ġ= Ġread Line () !!. split (" Ġ"). map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠ Ġvar Ġa Ġ= Ġread Line () !!. split (" Ġ"). map Ġ{ Ġit . to Long () Ġ} ĊĊĠĠĠ Ġvar Ġm index Ġ= Ġa . indexOf ( a . min By { Ġit Ġ}) ĊĊĠĠĠ Ġvar Ġedges Ġ= Ġmutable ListOf < Edge >() ĊĊĊĠĠĠ Ġrepeat ( m ){ ĊĠĠĠĠĠĠĠ Ġvar Ġline Ġ= Ġread Line () !!. split (" Ġ") ĊĠĠĠĠĠĠĠ Ġvar Ġfrom Ġ= Ġline [ 0 ]. toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġto Ġ= Ġline [ 1 ]. toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġcost Ġ= Ġline [ 2 ]. to Long () ĊĊĠĠĠĠĠĠĠ Ġedges . add ( Edge ( from - 1 , Ġto - 1 , Ġcost )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ){ ĊĠĠĠĠĠĠĠ Ġedges . add ( Edge ( i , Ġm index , Ġa [ min dex ] Ġ+ Ġa [ i ])) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġedges . sort With ( compare By Ġ{ it . cost }) ĊĠĠĠ Ġvar Ġds u Ġ= ĠD SU ( n ) ĊĠĠĠ Ġvar Ġans Ġ= Ġ 0 L ĊĊĠĠĠ Ġfor ( edge Ġin Ġedges ){ ĊĠĠĠĠĠĠĠ Ġif ( ds u . find ( edge . from ) Ġ== Ġds u . find ( edge . to )) Ġcontinue ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġans Ġ+= Ġedge . cost ĊĠĠĠĠĠĠĠĠĠĠĠ Ġds u . join ( edge . from , Ġedge . to ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln ( ans ) Ċ } Ċ