社区讨论
悬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 条回复,欢迎继续交流。
正在加载回复...