Application étendue de l'arbre couvrant minimum -------- Arctic Communication Network

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;
}
164 articles originaux publiés · J'aime 112 · Visiteurs 6774

Je suppose que tu aimes

Origine blog.csdn.net/qq_45772483/article/details/105441778
conseillé
Classement