n个点,m条边
#include<bits/stdc++.h>
using namespace std;
struct edge{
int sta,ed,val;
}a[1000005],b[1000005];
int n,m,tot,f[1000005];
bool mmp(edge a,edge b){
return a.val<b.val;
}
void add(int sta,int ed,int val){
tot++;
b[tot].sta=sta;
b[tot].ed=ed;
b[tot].val=val;
}
int find(int x){
if (x==f[x]) return x;
f[x]=find(f[x]);
return f[x];
}
int main(){
scanf("%d%d",&n,&m);
for (int i=1; i<=n; i++) f[i]=i;
for (int i=1,x,y,z; i<=m; i++){
scanf("%d%d%d",&x,&y,&z);
a[i].sta=x;
a[i].ed=y;
a[i].val=z;
}
sort(a+1,a+1+m,mmp);
for (int i=1,x,y; i<=m; i++){
x=find(a[i].sta);
y=find(a[i].ed);
if (x!=y){
f[x]=y;
add(a[i].sta,a[i].ed,a[i].val);
}
if (tot==n-1) break;
}
return 0;
}