P3366
#include<bits/stdc++.h>
using namespace std;
int f[1000010],n,m;
long long int ans;
struct edge{
int x,y,w;
}e[1000010];
int find(int a){
if(f[a]==a) return a;
else return f[a]=find(f[a]);
}
void add(int x,int y){
x=find(f[x]);
y=find(f[y]);
f[x]=y;
return;
}
bool cmp(edge a,edge b){
return a.w<b.w;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>e[i].x>>e[i].y>>e[i].w;
}
for(int i=1;i<=n;i++) f[i]=i;
int flag1=0;
sort(e+1,e+m+1,cmp);
for(int i=1;i<=m+1;i++){
if(find(e[i].x)==find(e[i].y)) continue;
else{
add(e[i].x,e[i].y);
ans+=e[i].w;
}
}
cout<<ans;
return 0;
}