deepseek-v3都调懵了
#include <bits/stdc++.h>
using namespace std;
#define AC ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define int long long
const int M = 1e6 + 10;
const int N = 1e3 + 10;
int n, m, f[N], k;
pair <int, int> po[N];
struct node {
int u, v;
int d;
bool friend operator < (node a, node b) {
return a.d < b.d;
}
} e[M];
int find_f (int x) {
if (f[x] == x) return x;
return f[x] = find_f(f[x]);
}
int sdo_d (int a, int b) {
int dx = abs(po[a].first - po[b].first);
int dy = abs(po[a].second - po[b].second);
return (dx * dx) + (dy * dy);
}
signed main () {
AC;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
int x, y;
cin >> x >> y;
po[i] = {x, y};
}
for (int i = 1; i <= n; i++) {
for (int j = i; j <= n; j++) {
if (i == j) continue;
e[++m].u = i;
e[m].v = j;
e[m].d = sdo_d(i, j);
}
}
for (int i = 1; i <= n; i++) {
f[i] = i;
}
sort(e + 1, e + m + 1);
int cnt = n;
int ans;
if (k == 1) {
cout << 0.00;
return 0;
}
if (n == k) {
cout << fixed << setprecision(2) << sqrt(e[1].d);
return 0;
}
for (int i = 1; i <= m; i++) {
auto [u, v, d] = e[i];
if (find_f(u) == find_f(v)) continue;
f[find_f(u)] = find_f(v);
cnt--;
if (cnt <= k) {
ans = e[i + 1].d;
break;
}
}
cout << fixed << setprecision(2) << sqrt(ans);
return 0;
}