【题目来源】
【分析】
#最小生成树
#并查集
#前向星存图
#克鲁斯卡尔
【代码】
#include<iostream>
#include<cstdio>
#include<algorithm> //sort函数
using namespace std;
const int N=5000+5;
const int M=2e5+5;
struct edge{
int u,v,w;
}e[M];
int n,m;
int k,sum;
int f[N];
int findf(int x){
return x==f[x]?x:f[x]=findf(f[x]);
}
bool cmp(edge a,edge b){
return a.w<b.w;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
}
sort(e+1,e+1+m,cmp);
for(int i=1;i<=n;i++){
f[i]=i;
}
for(int i=1;i<=m;i++){
int u=e[i].u;
int v=e[i].v;
int w=e[i].w;
if(findf(u)==findf(v))continue;
f[findf(u)]=findf(v);
k++;
sum+=w;
if(k==n-1)break;
}
if(k==n-1){
printf("%d",sum);
}else{
printf("orz");
}
return 0;
}