模板题
https://www.luogu.org/problem/show?pid=3366
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<queue> #define maxn 233333333333 using namespace std; int n,m,s,t; int a[5005][5005]; int dis[100005],f[100005]; int main() { cin>>n>>m; int u,v,w; memset(a,127/3,sizeof(a)); memset(dis,127/3,sizeof(dis)); for(int i=1;i<=m;++i) { scanf("%d%d%d",&u,&v,&w); if(w<a[u][v]) a[u][v]=w,a[v][u]=w; //因为有重边,所以读入时选择最小的边 } for(int i=1;i<=n;i++)f[i]=1; dis[1]=0; for(int i=1;i<=n;++i) { int k=0,o=0; for(int j=1;j<=n;j++)if(f[j]==1&&(dis[j]<dis[k]))k=j; f[k]=0; for(int j=1;j<=n;++j) { if(f[j]==1&&(a[k][j]<dis[j])) dis[j]=a[k][j],o=j; } } int ans=0; for(int i=1;i<=n;++i)ans+=dis[i]; //累加答案 if(ans<maxn)cout<<ans; else puts("orz"); puts(""); return 0; }