rt
code:
#include<bits/stdc++.h>
using namespace std;
int n,m,ans,fa[50001],cnt;
bool sf[50001];
struct Edge
{
int val,start,to;
};
Edge edge[2000001];
bool cmp(Edge a,Edge b)
{
return a.val<b.val;
}
int find(int x)
{
while(x!=fa[x])
x=(fa[x]=fa[fa[x]]);
return x;
}
void kruskal()
{
sort(edge,edge+m,cmp);
for(int i=0;i<m;i++)
{
int us,ut;
us=find(edge[i].start);
ut=find(edge[i].to);
if(us!=ut)
{
ans+=edge[i].val;
fa[edge[i].start]=edge[i].to;
if(++cnt==n-1)
break;
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
fa[i]=i;
for(int i=0;i<m;i++)
cin>>edge[m].start>>edge[m].to>>edge[m].val;
kruskal();
cout<<ans;
return 0;
}