1 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int MAXN = 1000; int n, k; int x[MAXN + 5], y[MAXN + 5]; struct Edge { int u, v, w; // w存距离的平方、减少开方运算的次数 }; vector<Edge> e; bool cmp(Edge x, Edge y) { return x.w < y.w; } int fa[MAXN + 5]; int findFa(int x) { if (x == fa[x]) return x; return fa[x] = findFa(fa[x]); } signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> k; for (int i = 1; i <= n; i++) cin >> x[i] >> y[i]; for (int i = 1; i <= n; i++) for (int j = i + 1; j <= n; j++) { int len = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]); e.push_back({i, j, len}); } sort(e.begin(), e.end(), cmp); for (int i = 1; i <= n; i++) fa[i] = i; int num = n; // 连通块数量 int ans = 0; for (int i = 0; i <= (int)e.size() - 1; i++) { int u = e[i].u, v = e[i].v, w = e[i].w; int faU = findFa(u); int faV = findFa(v); if (faU == faV) continue; fa[faU] = faV; num--; if (num == k - 1) { ans = w; break; } } cout << fixed << setprecision(2) << sqrt(ans); return 0; }
- 1
信息
- ID
- 4768
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 4
- 标签
- 递交数
- 19
- 已通过
- 11
- 上传者