https://www.luogu.org/problem/P3366
#include<iostream>
#include<algorithm>
using namespace std;
const int N=5010,M=200010;
struct edge
{
int x,y,z;
bool operator<(const edge b)const
{
return this->z<b.z;
}
}E[M];
int parent[N];
int findx(int n)
{
int k=n;
while(k!=parent[k])k=parent[k];
return parent[n]=k;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)parent[i]=i;
for(int i=0;i<m;i++){
cin>>E[i].x>>E[i].y>>E[i].z;
}
sort(E,E+m);
int build=0;//连接起来的边
int length=0;//连接起来的边总长
for(int i=0;i<m;i++){
if(build==n-1)break;
int parentA=findx(E[i].x),parentB=findx(E[i].y);
if(parentA!=parentB){
parent[parentA]=parentB;
build++;
length+=E[i].z;
}
}
if(build==n-1)cout<<length;
else cout<<"orz";
return 0;
}