社区讨论
40pts RE求调 有调必关
P1991无线通讯网参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mjk0qsn2
- 此快照首次捕获于
- 2025/12/24 20:57 2 个月前
- 此快照最后确认于
- 2025/12/27 09:05 2 个月前
代码如下:(前两个点AC,后几个RE)
CPP#include<bits/stdc++.h>
using namespace std;
int fa[505],px[505],py[505];
double ans[505];
int n,m,k,cnt;
struct Node{
int x,y;
double d;
};
Node p[25000];
double dist(int ax,int ay,int bx,int by){
return sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));
}
bool cmp(Node x,Node y){
return x.d<y.d;
}
void init(int n){
for(int i=1;i<=n;i++){
fa[i]=i;
}
}
int find(int x){
if(fa[x]==x){
return x;
}
return fa[x]=find(fa[x]);
}
bool merge(int x,int y){
int n=find(x);
int m=find(y);
if(n!=m){
fa[x]=y;
return true;
}
return false;
}
int main(){
cin>>k>>n;
if(k>=n){
cout<<"0.00"<<endl;
}
init(n);
for(int i=1;i<=n;i++){
cin>>px[i]>>py[i];
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
m++;
p[m]=(Node){i,j,dist(px[i],py[i],px[j],py[j])};
}
}
sort(p+1,p+1+m,cmp);
for(int i=1;i<=m;i++){
if(merge(p[i].x,p[i].y)){
cnt++;
ans[cnt]=p[i].d;
}
}
double num=ans[cnt-k+1];
num*=100;
num+=0.5;
int num1=num;
num=num1;
num/=100;
cout<<num;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...