【题目来源】
【模板】最小生成树 - 洛谷
【分析】
#最小生成树
#并查集
#前向星存图
#克鲁斯卡尔
【代码】
#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; }