代码中用注释标注的双重循环若换成memset(a,MAXN,sizeof(a));则会全WA(好奇怪!)
#include <bits/stdc++.h>
using namespace std;
const int N=5005,MAXN=0xfffffff;
int n,m,minn,ans=0;
int minc[N],a[N][N];
int main()
{
ios::sync_with_stdio(0);
for(int i=0;i<N;i++) //这里这里
{
for(int j=0;j<N;j++)
{
a[i][j]=MAXN;
}
}
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
if(z<a[x][y]) a[y][x]=a[x][y]=z;
}
if(n-1>m)
{
cout<<"orz";
return 0;
}
for(int i=1;i<=n;i++)
{
minc[i]=a[1][i];
}
minc[1]=0;
for(int i=1;i<n;i++)
{
int k;
minn=MAXN;
for(int j=1;j<=n;j++)
{
if(minc[j]&&minc[j]<minn) minn=minc[j],k=j;
}
minc[k]=0;
ans+=minn;
for(int j=1;j<=n;j++)
{
minc[j]=min(minc[j],a[k][j]);
}
}
if(ans>=MAXN) cout<<"orz";
else cout<<ans;
return 0;
}