50pts玄关求调(样例2没过, WA on #3 #4 #5 #7 #9)
查看原帖
50pts玄关求调(样例2没过, WA on #3 #4 #5 #7 #9)
1466830
RoyalCookie楼主2025/7/24 16:36

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;
}
2025/7/24 16:36
加载中...