1 #include<stdio.h>
2 #include<algorithm>
3 using namespace std;
4 struct edge
5 {
6 int start,end,len;
7 bool operator < (const edge & a)const
8 {
9 return len<a.len;
10 }
11 };
12 int f[1010],m,n;
13 void init(){for(int i=1;i<=n;i++)f[i]=i;}
14 int root(int a){while(a!=f[a])a=f[a];return a;}
15 void uniset(int a,int b)
16 {
17 a=root(a),b=root(b);
18 if(a<b)f[b]=a;
19 if(b<a)f[a]=b;
20 }
21 bool sameset(int a,int b)
22 {
23 if(root(a)==root(b))return 1;
24 return 0;
25 }
26 bool connected()
27 {
28 for(int i=2;i<=n;i++)
29 if(root(i)!=root(1))return 0;
30 return 1;
31 }
32 main()
33 {
34 int i,j,k,sum;
35 while(~scanf("%d%d",&n,&m))
36 {
37 edge s[m];
38 sum=0,init();
39 for(i=0;i<m;i++)scanf("%d%d%d",&s[i].start,&s[i].end,&s[i].len);
40 sort(s,s+m);
41 for(i=0;i<m;i++)if(!sameset(s[i].start,s[i].end))uniset(s[i].start,s[i].end),sum+=s[i].len;
42 if(connected())printf("%d\n",sum);
43 else printf("no\n");
44 }
45 }