Une région de l'Arctique a nn
Villages, les coordonnées de chaque village utilisent une paire d'entiers (x, y) (x, y)
Dit. Afin de renforcer la connexion, il a été décidé d'établir un réseau de communication entre les villages afin que tous les deux villages puissent communiquer directement ou indirectement. L'outil de communication peut être un émetteur-récepteur radio ou un appareil satellite. Il existe de nombreux modèles différents d'émetteurs-récepteurs radio, et différents modèles d'émetteurs-récepteurs radio ont un paramètre différent dd
, Si la distance entre les deux villages ne dépasse pas dd
, Vous pouvez communiquer directement avec ce type d'émetteur-récepteur radio, dd
Plus la valeur est élevée, plus le modèle est cher. Maintenant, nous devons d'abord sélectionner un certain type d'émetteur-récepteur radio, puis équiper tous les villages d'un numéro uniforme, mais le nombre n'est pas limité, mais les modèles sont les mêmes. Deux villages équipés de matériel satellite peuvent communiquer directement, quelle que soit leur distance, mais le matériel satellite est limité et ne peut être équipé que pour certains villages. Kk maintenant
Appareil satellite, veuillez écrire un programme pour calculer comment allouer ce kk
Equipement satellite pour réaliser le dd de l'émetteur-récepteur radio équipé
La valeur est la plus petite. Par exemple, pour les trois villages suivants: où | AB | = 10, | BC | = 20, | AC | = 105√≈22.36 | AB | = 10, | BC | = 20, | AC | = 105≈22.36
. S'il n'y a pas d'équipement satellite ou seulement 11
Équipement satellite (k = 0k = 0
Ou k = 1k = 1
), Alors le plus petit d = 20d = 20 qui satisfait la condition
Parce que AA
Et BB
, BB
Et CC
Peut communiquer directement par radio; tandis que AA
Et CC
Peut utiliser BB
Transfert pour établir une communication indirecte (c'est-à-dire des messages des AA
Propagation à BB
Et puis de BB
Passer à CC
); S'il y a 22
Équipement satellite (k = 2k = 2
), Vous pouvez affecter ces deux appareils à BB séparément
Et CC
, Donc le plus petit dd
Souhaitable 1010
Parce que AA
Et BB
Peut communiquer directement avec la radio; BB
Et CC
Peut communiquer directement avec les satellites; AA
Et CC
Peut utiliser BB
Le transit réalise la communication indirecte. S'il y en a 33
Équipement satellite, A, B, CA, B, C
La communication par satellite peut être utilisée directement entre les deux, le plus petit dd
Souhaitable 00
. La première ligne du format d'entrée est deux entiers n, kn, k séparés par des espaces
; Suivant
Ligne, deux entiers par ligne, ii
Ligne de xi, yixi, yi
Moyens ii
Les coordonnées des villages (xi, yixi, yi
). Le format de sortie est un nombre réel, indiquant le plus petit dd
Valeur, le résultat reste 22
Décimales. Plage de données 1≤n≤5001≤n≤500
,
0≤x, y≤1040≤x, y≤104
,
0≤k≤1000≤k≤100
Entrée échantillon: 3 2
10 10
10 0
30 0
Sortie échantillon: 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;
}