Aplicación extendida del árbol de expansión mínimo -------- Red de comunicación del Ártico

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;
}
164 artículos originales publicados · Me gusta 112 · Visitantes 6774

Supongo que te gusta

Origin blog.csdn.net/qq_45772483/article/details/105441778
Recomendado
Clasificación