#include<bits/stdc++.h>
using namespace std;
int n,m;
int f[5005];
void clean()
{
for(int i=1;i<=n;i++)
{
f[i]=i;
}
}//初始化并查集
int mf(int v)
{
if(f[v]==v) return v;
else
{
f[v]=mf(f[v]);
return f[v];
}
}//找爹
void mer(int a,int b)
{
int af=mf(a);
int bf=mf(b);
if(af!=bf)
{
f[bf]=af;
}
}//合并
struct make_edge
{
int a;
int b;
int w;
};//每条边
make_edge edge[200005];
bool cmp(make_edge a,make_edge b)
{
return a.w<b.w;
}
int main()
{
cin>>n>>m;
clean();
for(int i=1;i<=m;i++)
{
int a,b,w;
cin>>a>>b>>w;//有向图无向图都是一条边
edge[i].a=a;
edge[i].b=b;
edge[i].w=w;
}
sort(edge+1,edge+m+1,cmp);//排序
int count=0;//边数
int sum=0;
for(int i=1;i<=m;i++)
{
if(mf(edge[i].a)==mf(edge[i].b)) continue;
else
{
mer(edge[i].a,edge[i].b);
sum+=edge[i].w;
count++;
}
if(count==n-1)
{
break;
}
}
if(count<n-1) cout<<"orz"<<endl;
else cout<<sum<<endl;
return 0;
}
不需要邻接表