#include<cstdio> #include<vector> #include<cstring> #include<set> #define maxn 5050 #define fi first #define se second using namespace std; typedef pair<int,int> PII; vector <PII> s[maxn]; int map[5001][5001]; int low_cost[maxn],zou[maxn],n,m,x,y,val,zhong,mi,ans; int up(int x,int y,int val) { for(int i=0;i<s[x].size();i++) { if(s[x][i].fi==y ) { if( s[x][i].se>val) { s[x][i].se=val; } return 1; } } return 0; } main(){ // freopen("data.in","r",stdin); scanf("%d%d",&n,&m); memset(low_cost,127/3,sizeof(low_cost)); // memset(map,127/3,sizeof(map)); for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&val); if(x==y) continue; // map[x][y]=min(map[x][y],val); // map[y][x]=min(map[y][x],val); if(up(x,y,val)) up(y,x,val); else { s[x].push_back(PII(y,val)); s[y].push_back(PII(x,val)); } } for(int i=0;i<s[1].size();i++) { low_cost[s[1][i].fi]=s[1][i].se; } /* for(int i=2;i<=n;i++) { low_cost[i]=min(low_cost[i],map[1][i]); }*/ zou[1]=1; zhong=1; for(int qwer=1;qwer<n;qwer++) { int f=0; mi=1000000000; for(int i=1;i<=n;i++) { if(low_cost[i]<mi && zou[i]==0) { mi=low_cost[i]; zhong=i; f=1; } } if(f==0) { printf("orz"); return 0; } ans+=mi; zou[zhong]=1; for(int i=0;i<s[zhong].size();i++) { if(zou[s[zhong][i].fi]==1) continue; low_cost[s[zhong][i].fi]=min(low_cost[s[zhong][i].fi],s[zhong][i].se); } /* for(int i=1;i<=n;i++) { if(map[zhong][i]<low_cost[i]) low_cost[i]=map[zhong][i]; }*/ } printf("%d",ans); }