Un área en el Ártico tiene nn
Aldeas, las coordenadas de cada aldea usan un par de enteros (x, y) (x, y)
Dijo. Para fortalecer la conexión, se decidió establecer una red de comunicación entre las aldeas para que cada dos aldeas puedan comunicarse directa o indirectamente. La herramienta de comunicación puede ser un transceptor de radio o un dispositivo satelital. Hay muchos modelos diferentes de transceptores de radio, y diferentes modelos de transceptores de radio tienen un parámetro diferente dd
, Si la distancia entre las dos aldeas no excede dd
, Puede comunicarse directamente con este tipo de transceptor de radio, dd
Cuanto mayor sea el valor, más caro será el modelo. Ahora primero debemos seleccionar un cierto tipo de transceptor de radio y luego equipar a todas las aldeas con un número uniforme, pero el número no es limitado, pero los modelos son los mismos. Dos pueblos equipados con equipos satelitales pueden comunicarse directamente sin importar cuán separados estén, pero los equipos satelitales son limitados y solo pueden equiparse para algunos pueblos. Kk ahora
Dispositivo satelital, escriba un programa para calcular cómo asignar este kk
Equipo satelital para hacer el dd del transceptor de radio equipado
El valor es el más pequeño. Por ejemplo, para las siguientes tres aldeas: donde | AB | = 10, | BC | = 20, | AC | = 105√≈22.36 | AB | = 10, | BC | = 20, | AC | = 105≈22.36
. Si no hay equipo satelital o solo 11
Equipo satelital (k = 0k = 0
O k = 1k = 1
), Entonces el más pequeño d = 20d = 20 que satisface la condición
Porque AA
Y BB
, BB
Y CC
Puede comunicarse directamente por radio; mientras que AA
Y CC
Puede usar BB
Transferencia para lograr comunicación indirecta (es decir, mensajes de AA
Difundir a BB
Y luego de BB
Pase a CC
); Si hay 22
Equipo satelital (k = 2k = 2
), Puede asignar estos dos dispositivos a BB por separado
Y CC
, Entonces el dd más pequeño
Deseable 1010
Porque AA
Y BB
Puede comunicarse directamente con la radio; BB
Y CC
Puede comunicarse directamente con satélites; AA
Y CC
Puede usar BB
Transit realiza comunicación indirecta. Si hay 33
Equipo satelital, A, B, CA, B, C
La comunicación satelital se puede usar directamente entre los dos, el dd más pequeño
Deseable 00
. La primera línea del formato de entrada son dos enteros n, kn, k separados por espacios
; Siguiente
Línea, dos enteros por línea, ii
Línea de xi, yixi, yi
Medios ii
Las coordenadas de los pueblos (xi, yixi, yi
) El formato de salida es un número real, que indica el dd más pequeño.
Valor, el resultado sigue siendo 22
Lugares decimales. Rango de datos 1≤n≤5001≤n≤500
,
0≤x, y≤1040≤x, y≤104
,
0≤k≤1000≤k≤100
Entrada de muestra: 3 2
10 10
10 0
30 0
Salida de muestra: 10.00
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 510, M = N * N / 2;
#define x first
#define y second
typedef pair<int, int> PII;
int n, m, k;
struct Edge{
int a, b;
double w;
bool operator <(const Edge &t) const{
return w < t.w;
}
}e[M];
PII q[N];
int p[N];
double get_dist(PII a, PII b){
int dx = a.x - b.x;
int dy = a.y - b.y;
return sqrt(dx * dx + dy * dy);
}
int find(int x){
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
int main(){
cin >> n >> k;
for (int i = 0; i < n; i ++)
cin >> q[i].x >> q[i].second;
for (int i = 0; i < n; i ++)
for (int j = 0; j < i; j ++)
e[m ++] = {i, j, get_dist(q[i], q[j])};
for (int i = 0; i < n; i ++) p[i] = i;
sort(e, e + m);
double res = 0;
int cnt = n;
for (int i = 0; i < m; i ++){
if (cnt <= k) break;
int a = find(e[i].a), b = find(e[i].b);
double w = e[i].w;
if (a != b){
p[a] = b;
cnt --;
res = w;
}
}
printf("%.2lf\n", res);
return 0;
}