详见我的代码
#include<iostream>
#include<cmath>
#include<algorithm>
#include<iomanip>
#define N 500
using namespace std;
int x[N], y[N], f[N];
struct edg {
edg() {}
edg(int _u, int _v, double _w):
u(_u), v(_v), w(_w) {}
int u, v; double w;
} e[N*N];
double inline dis(int i, int j) {
return sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));}
bool inline cmp(edg a, edg b) {return a.w < b.w;}
int getf(int x) {return f[x] == x ? x : f[x] = getf(f[x]);}
int main() {
int s, p, l=0; cin >> s >> p;
for (int i=0; i<p; i++) {
f[i] = i, cin >> x[i] >> y[i];
for (int j=0; j<i; j++)
e[l++] = edg(i, j, dis(i, j));
}
sort(e, e+l, cmp);
double mx = 0;
for (int i=0, j=0; i<l && j<p-s; i++) {
if (getf(e[i].u) != getf(e[i].v)) {
f[e[i].u] = e[i].v;
mx = e[i].w, j++;
}
}
cout << fixed << setprecision(2) << mx;
return 0;
}
我的代码所有数组都是从1开始的,大佬勿喷