社区讨论

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 条回复,欢迎继续交流。

正在加载回复...