#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<algorithm>
#define max 0x3f3f3f3f
如果定义成0x7FFFFFFF答案也是错的
using namespace std;
int map[200][200];
int mark[200];
int low[200];
int n,m,a,b,c,sum,i,j;
/*int prim(int pos)
{
int min;
mark[pos]=1;
for(i=1;i<=n;i++)
{
if(i!=pos)
low[i]=map[pos][i];
}
for(i=1;i<=n;i++)
{
min=max;
for(j=1;j<=n;j++)
{
if(low[j]<min&&mark[j]==0)
{
min=low[j];
pos=j;
}
}
sum=sum+min;
mark[pos]=1;
for(j=1;j<=n;j++)
{
if(map[pos][j]<low[j]&&mark[j]==0)
{
low[j]=map[pos][j];
}
}
}
return sum;
}*/
int prim(int start)
{
int pos,min;
mark[start]=1;
for(i=1;i<=n;i++)
{
low[i]=map[start][i];
}
for(i=1;i<n;i++)
//一定要注意这里是循环n-1次 {
min=max;
for(j=1;j<=n;j++)
{
if(low[j]<min && mark[j]==0)
{
min=low[j];
pos=j;
}
}
sum+=min;
mark[pos]=1;
for(j=1;j<=n;j++)
{
if(map[pos][j]<low[j] && mark[j]==0)
{
low[j]=map[pos][j];
}
}
}
return sum;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
sum=0;
memset(mark,0,sizeof(mark));
memset(map,max,sizeof(map));
memset(low,max,sizeof(low));
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
if(map[a][b]>c||map[b][a]>c)
{
map[a][b]=map[b][a]=c;
}
}
int ans=prim(1);
printf("%d\n",ans);
}
}
/**************************************
Problem id : SDUT OJ I