这题是一个完全图(n<=1000),但题解没有一个用prim的,讨论区也没有多少。 以及题解都用的n-k+1,但我n-k+2能过,不知道为什么,求解
#include<bits/stdc++.h>
using namespace std;
int n,k;
double x[1010],y[1010],ans;
double d[1010];
bool v[1010];
double lr(double s1,double s2,double s3,double s4){
s2=abs(s2-s1);s4=abs(s4-s3);
return sqrt(s2*s2+s4*s4);
}
void prim()
{
for(int i=1;i<=n;i++)d[i]=10000000000;
memset(v,0,sizeof v);
d[1]=0;
for(int i=1;i<n;i++){
int xx=0;
for(int j=1;j<=n;j++)
if(!v[j]&&(xx==0||d[j]<d[xx]))xx=j;
v[xx]=1;
for(int j=1;j<=n;j++){
if(!v[j]) d[j]=min(d[j],lr(x[xx],x[j],y[xx],y[j]));
}
}
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i];
}
prim();
sort(d+1,d+n+1);
printf("%.2lf",d[n+2-k]);
return 0;
}