这题是不是不能用Prim做啊,Prim剩下来的应该都是单独的点
#include <bits/stdc++.h>
#define INF 99999999
using namespace std;
int e[5001][5001],n,m,k,ans=0;
int dis[5001],book[5001];
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j)e[i][j]=0;
else e[i][j]=INF;
for(int i=0;i<m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(x!=y)
{
e[x][y]=min(z,e[x][y]);
e[y][x]=min(z,e[y][x]);
}
}
for(int j=1;j<=n;j++)
dis[j]=e[1][j];
book[1]=1;dis[0]=INF;
for(int p=1;p<=n-k;p++)
{
int q=0;
for(int j=1;j<=n;j++)
if(dis[j]<dis[q]&&!book[j])
q=j;
book[q]=1;
if(dis[q]!=INF)ans+=dis[q];
for(int j=1;j<=n;j++)
if((e[q][j]<dis[j])&&!book[j])
dis[j]=e[q][j];
}
if(ans==INF)printf("No Answer");
else printf("%d",ans);
return 0;
}
#7的数据大到连云贴剪板都放不下