没人用prim吗
查看原帖
没人用prim吗
247162
zty1203楼主2022/3/18 15:48

这题是一个完全图(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;
}
2022/3/18 15:48
加载中...