本地过了但是全re,求调
查看原帖
本地过了但是全re,求调
1033990
lw393楼主2024/5/16 22:15
#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
using namespace std;
const int N = 1005;
struct node{
	int x, y;
}arr[N];

double dis(node a, node b){
	return sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2));
}

struct edge{
	int u, v;
	double d;
}e[N * N];
int cnt;

bool cmp(edge a, edge b){
	return a.d < b.d;
}

int father[N];
int init(){
	for(int i = 1; i < N; i++)father[i] = i;
}
int find(int x){
	if(x != father[x])x = find(father[x]);
	return father[x];
}
bool bing(int a, int b){
	int x = find(a);
	int y = find(b);
	if(x != y){
		father[y] = father[x];
		return 1;
	}
	return 0;
}

double kruskal(int p, int s, int t){
	init();
	double sum = 0;
	int cnt = 0;
	for(int i = 0; i < t; i++){
		//cout << i;
		if(bing(e[i].u, e[i].v)){
			cnt++;
			sum = max(sum, e[i].d);
			if(cnt == p - s){
				return sum;
			}
		}
	}
	return 0;
}

int main(){
	int s, q;
	cin >> s >> q;
	for(int i = 1; i <= q; i++){
		cin >> arr[i].x >> arr[i].y;
	} 
	for(int i = 1; i <= q; i++){
		for(int j = i + 1; j <= q; j++){
			e[cnt++] = {i, j, dis(arr[i], arr[j])};
		}
	}
	sort(e, e + cnt, cmp);
	cout << fixed << setprecision(2) << kruskal(q, s, cnt);
	return 0;
}

https://www.luogu.com.cn/record/159205338

2024/5/16 22:15
加载中...