看半天没发现问题 马上就下线了 上线后再给关注
#include<bits/stdc++.h>
using namespace std;
const int MAXN=6000;
int a,b;
int cnt,tot,ans;
int father[MAXN];
struct Edge{
int x;
int y;
int w;
}f[MAXN];
bool cmp(Edge a,Edge b){//sort排序规则,按费用从低到高排序
return a.w<b.w;
}
void add(int m,int n,int p){
cnt++;
f[cnt].x=m;
f[cnt].y=n;
f[cnt].w=p;
}
int fath(int v){
if(father[v]!=v) father[v]=fath(father[v]);
return father[v];
}
void unionn(int u,int v){
int fa=fath(u);
int fb=fath(v);
if(fa!=fb) father[fa]=fb;
}
int main(){
int k;
cin>>a>>b;
for(int i=1;i<=b;i++){
for(int j=1;j<=b;j++){
cin>>k;
if(i<j && k!=0){
add(i,j,k);
}
}
}
for(int i=1;i<=b;i++){//初始化
father[i]=i;
}
for(int i=1;i<=b;i++){
add(0,i,a);
}
sort(f+1,f+1+cnt,cmp);
for(int i=1;i<=cnt;i++){
if(fath(f[i].x)!=fath(f[i].y)){
unionn(f[i].x,f[i].y);
ans+=f[i].w;
tot++;
}
if(tot>=cnt){
break;
}
}
cout<<ans<<endl;
return 0;
}