/*kruskal算法是枚举所有边,找出避免构成环的最小边,一一添加到生成树里面,纯粹的kruskal可以不需要建图,保存所有边的节点和权值就行*/
#include <iostream>
#include <fstream>
using namespace std;
const int M=10000000;
struct edge
{
int u,v,len;
};
int pre[101];
int n,m;
edge T[101];
void readData();
int kruskal();
int main()
{
readData();
cout<<kruskal()<<endl;
return 0;
}
int father(int s)
{
while (pre[s])
{
s=pre[s];
}
return s;
}
int kruskal()
{
int sum,u,v,len;
int i,k,t;
for (i=1;i<=n;i++)
pre[i]=0;
for (sum=0,k=1;k<n;k++)
{
for (i=1,t=1;i<=m;i++)
if (father(T[i].u)!=father(T[i].v)&&T[i].len<T[t].len)
t=i;
sum+=T[t].len;
pre[father(T[t].v)]=father(T[t].u);
}
return sum;
}
void readData()
{
ifstream cin("1.txt");
int i,j;
cin>>n>>m;
for (i=1;i<=m;i++)
cin>>T[i].u>>T[i].v>>T[i].len;
}