//这么简单的东西我就不废话了,具体看代码<br data-filtered="filtered">#include<iostream>
#include<queue>#include<cstdio>using namespace std;int n,m,fa[110],ans;//fa数组记录fa【i】的根;struct str{ int x,y,s; //x——起点,y——终点,s——权值;}u[110];int find(int x){ //寻找根; if(fa(x)==x) return x; else return fa(x)=find(fa(x));}bool cmp(str x,str y){ //结构体排序 ; return x.s<y.s;}int main(){ scanf("%d%m",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d%d",&u[i].x,&u[i].y,&u[i].s); } for(int i=1;i<=n;i++) fa[i]=i; //初始化根 ; sort(u+1,u+m+1,cmp); q=1; for(int i=1;i<=m;i++){ int fx=find(u[i].x); //寻找起点的根 ; int fy=find(u[i].y); //寻找终点的根; if(fx!=fy){ //如果不是同一个根,将两个不同的集合合并,(将fx的根付给fy也行)如: fa[fx]=fy; //fa【fy】=fx; ans+=u[i].s; //加上权值 q++; //记录链接的边 } if(q==n) break; } printf("%d",ans); return 0;}原文:https://www.cnblogs.com/noifish/p/10339612.html