1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #define INF 99999999
5 int map[1000][1000],dis[1000],visited[10000];
6 int sum;
7 void prim(int n)
8 {
9 int count=1,i,j,k;
10 while(count<=n)
11 {
12 count++;
13 int min=INF;
14 for(i=1; i<=n; i++)
15 {
16 if(visited[i]==0&&dis[i]<min)
17 {
18 min=dis[i];
19 j=i;
20 }
21 }
22 if(min==INF)
23 {
24 sum=-1;
25 return;
26 }
27 visited[j]=1;
28 sum+=dis[j];
29 for(k=1; k<=n; k++)
30 {
31 if(visited[k]==0&&dis[k]>map[j][k])
32 dis[k]=map[j][k];
33 }
34 }
35
36 }
37 int main()
38 {
39 int n,m;
40 while(~scanf("%d%d",&n,&m))
41 {
42 int i,j;
43 sum=0;
44 memset(visited,0,sizeof(visited));
45 for(i=1; i<=n; i++)
46 {
47 for(j=1; j<=n; j++)
48 {
49 if(i==j)
50 map[i][j]=0;
51 else
52 map[i][j]=INF;
53 }
54 }
55 while(m--)
56 {
57 int a,b,c;
58 scanf("%d%d%d",&a,&b,&c);
59 map[a][b]=map[b][a]=c;
60 }
61 for(i=1; i<=n; i++)
62 {
63 dis[i]=map[1][i];
64 }
65 prim(n);
66 printf("%d\n",sum);
67 }
68 return 0;
69 }