社区讨论

悬2关,样例2输出1.00

P4047[JSOI2010] 部落划分参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mkgzdooz
此快照首次捕获于
2026/01/16 22:35
上个月
此快照最后确认于
2026/01/19 15:20
上个月
查看原帖
可爱小 prim 求条
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long

const int N=1005;
const double inf=99999;
int n,k,pre[N],cur;
double ans[N];
int na;
struct in
{
	int x,y;
}a[N];
struct edge
{
	int l,r;
	double val;
	int nxt;
}e[N*N];
struct _
{
	int ix;
	double d;
	bool friend operator<(_ x,_ y) {return x.d>y.d;}
};

void ae(int u,int v,double w) {e[++cur]={u,v,w,pre[u]},pre[u]=cur;}

double cal(int x,int y) {return sqrt((a[x].x-a[y].x)*(a[x].x-a[y].x)*1.0+(a[x].y-a[y].y)*(a[x].y-a[y].y)*1.0);}

double dis[N];
int vis[N];
priority_queue<_> q;
void prim()
{
	for(int i=0;i<=n;i++)
		dis[i]=inf;
	dis[1]=0;
	q.push({1,0});
	while(!q.empty())
	{
		int x=q.top().ix;
		q.pop();
		if(vis[x])
			continue;
		vis[x]=1;
//		ans[++na]=dis[x];
		for(int i=pre[x];i;i=e[i].nxt)
		{
			int r=e[i].r;
			double w=e[i].val;
			if(dis[r]>w)
				dis[r]=w,q.push({r,dis[r]});
		}
	}
}

signed main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>a[i].x>>a[i].y;
	for(int i=1;i<=n;i++)
		for(int j=i+1;j<=n;j++)
			ae(i,j,cal(i,j)),ae(j,i,cal(i,j));
	prim();
	for(int i=1;i<=n;i++)
		if(dis[i]!=inf)
			ans[++na]=dis[i];
	sort(ans+1,ans+na+1,[](double x,double y) {return x>y;});
	cout<<fixed<<setprecision(2)<<ans[k-1]<<'\n';
}

回复

0 条回复,欢迎继续交流。

正在加载回复...