#include <iostream>
using namespace std ;
struct edge{
int u, v;
int w;
};
struct edge a[100 ];
int f[100 ];
int n, m;
struct edge tmp;
void quickSort(int left, int right){
if (left>right){
return ;
}else {
int i = left;
int j = right;
while (i < j){
while (a[j].w >= a[left].w && i < j){
j--;
}
while (a[i].w <= a[left].w && i < j){
i++;
}
if (i != j){
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
tmp = a[left];
a[left] = a[i];
a[i] = tmp;
quickSort(left, i-1 );
quickSort(i+1 , right);
return ;
}
}
int getf(int v){
if (v == f[v]){
return v;
}
f[v] = getf(f[v]);
return f[v];
}
int merge(int u, int v){
int t1 = getf(u);
int t2 = getf(v);
if (t1 != t2){
f[t2] = t1;
return 1 ;
}else {
return 0 ;
}
}
int main(){
cin >>n>>m;
for (int i=1 ; i<=m; i++){
cin >>a[i].u>>a[i].v>>a[i].w;
}
quickSort(1 , m);
for (int i=1 ; i<=n; i++){
f[i] = i;
}
int cnt = 0 ;
int sum = 0 ;
for (int i=1 ; i<=m; i++){
if ( merge(a[i].u, a[i].v) ){
cnt++;
sum += a[i].w;
}
if (cnt == n-1 ){
break ;
}
}
cout <<"cost:" <<sum<<endl;
return 0 ;
}
#include <iostream>
using namespace std ;
int a[100 ][100 ];
const int INF = 0x3f3f3f3f ;
int book[100 ];
int dis[100 ];
int cnt = 0 ;
int sum = 0 ;
int main(){
int n, m;
cin >>n>>m;
int tx, ty, d;
for (int i=1 ; i<+n; i++){
for (int j=1 ; j<=n; j++){
if (i == j){
a[i][j] = 0 ;
}else {
a[i][j] = INF;
}
}
}
for (int i=1 ; i<=m; i++){
cin >>tx>>ty>>d;
a[tx][ty] = d;
a[ty][tx] = d;
}
for (int i=1 ; i<=n; i++){
dis[i] = a[1 ][i];
}
book[1 ] = 1 ;
cnt++;
int t;
while (cnt < n){
int mmin = INF;
for (int i=1 ; i<=n; i++){
if (dis[i] < mmin && book[i] == 0 ){
mmin = dis[i];
t = i;
}
}
book[t] = 1 ;
sum += dis[t];
cnt++;
for (int i=1 ; i<=n; i++){
if (book[i] == 0 && dis[i] > a[t][i]){
dis[i] = a[t][i];
}
}
}
cout <<"sum:" <<sum<<endl;
return 0 ;
}