```cpp
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
struct edge{
int u,v,w;//u,v表示一条边两个顶点,w表示边的权值
};
struct edge e[5001];
bool cmp(edge x,edge y){
return x.w<y.w;
}
int getf(int v){//并查集寻找祖先的函数
if(f[v]==v){//如果找到
return v;//那么返回祖先
} else{
f[v]=getf(f[v]);//递归寻找祖先
return f[v];
}
}
int merge(int v,int u){//寻找符合规则的边
int t1,t2;
t1=getf(v);//用T1表示前一个点集合的祖先
t2=getf(u);
if(t1!=t2){
f[t2]=t1;
return 1;
}
return 0;
}
int n,m;
int f[200001]={0},sum=0,count=0;//f存储每一个节点编号,sum存储最小权值和,count表示当前边数
int main(){
int i;
cin>>n>>m;//输入节点数和边数
for(i=1;i<=m;i++){
cin>>e[i].u>>e[i].v>>e[i].w;
}
sort(e+1,e+m+1,cmp);
for(i=1;i<=n;i++){
f[i]=i;//顺序定义每一个结点的编号
}
for(i=1;i<=m;i++){
if(merge(e[i].u,e[i].v)){//如果该边符合要求
count++;//边数++
sum+=e[i].w;//将最小的边的权值进行累加
}
if(count==n-1){
break;//最小生成树的边数=无向图点数-1
}
}
cout<<sum;
return 0;
}
```
发错了,应该是这个
by WRTLEO2 @ 2020-04-26 11:08:42
@[WRTLEO2](/user/326796) 你的f数组没定义,然后把所有count改成cnt
by Alan_Zhao @ 2020-04-26 11:11:29
**https://www.luogu.com.cn/record/33125182**
这份您的代码,报错信息是有中文空格之类的东西,你去掉就能过了
by 1saunoya @ 2020-04-26 11:13:47
@[Isaunoya](/user/96580) 好的,已经过了,谢谢
----------------此贴完结------------------
by WRTLEO2 @ 2020-04-26 11:15:45
@[WRTLEO2](/user/326796) 呵呵
by JeffWang2019 @ 2020-04-26 11:43:11
@[WRTLEO2](/user/326796) 我们又见面了
by JeffWang2019 @ 2020-04-26 13:57:23
@[JeffWang2019](/user/219935) 是的呢(滑稽)
互关下?
by WRTLEO2 @ 2020-04-26 16:33:13