用prim做的,最后一个测试点错了
#include<bits/stdc++.h>
#define inf INT_MAX
using namespace std;
long long n,t,g[555][555],d[5555],ans,vis[5555];
void prim(int s){
for(int i=2;i<=n;i++) d[i]=inf;
d[s]=g[s][s];
for(int i=1;i<=n;i++){
int u,mmin=inf;
for(int j=1;j<=n;j++){
if(!vis[j]&&d[j]<mmin){
mmin=d[j];
u=j;
}
}
vis[u]=1;
ans+=mmin;
for(int j=1;j<=n;j++) if(!vis[j]&&d[j]>g[u][j]) d[j]=g[u][j];
}
}
int main(){
cin>>t>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>g[i][j];
if(i==j) g[i][j]=t;
if(g[i][j]==0) g[i][j]=g[j][i]=t;
}
}
prim(1);
cout<<ans;
return 0;
}