全部评论 2

  • #include <bits/stdc++.h>
    using namespace std;
    struct Edge {
        int u, v;
        double w;
        bool operator<(const Edge& other) const {
            return w < other.w;
        }
    };
    struct UnionFind {
        vector<int> parent;
        UnionFind(int n) {
            parent.resize(n);
            for (int i = 0; i < n; i++) parent[i] = i;
        }
        int find(int x) {
            if (parent[x] != x) parent[x] = find(parent[x]);
            return parent[x];
        }
        bool unite(int x, int y) {
            int px = find(x), py = find(y);
            if (px == py) return false;
            parent[px] = py;
            return true;
        }
    };
    int main() {
        int S, P;
        cin >> S >> P;
        vector<pair<int, int>> points(P);
        for (int i = 0; i < P; i++) {
            cin >> points[i].first >> points[i].second;
        }
        // 特殊情况:卫星电话足够多
        if (S >= P) {
            cout << "0.00" << endl;
            return 0;
        }
        // 计算所有边
        vector<Edge> edges;
        for (int i = 0; i < P; i++) {
            for (int j = i + 1; j < P; j++) {
                double dx = points[i].first - points[j].first;
                double dy = points[i].second - points[j].second;
                double dist = sqrt(dx * dx + dy * dy);
                edges.push_back({i, j, dist});
            }
        }
        // Kruskal求MST
        sort(edges.begin(), edges.end());
        UnionFind uf(P);
        vector<double> mstEdges; // 存储MST中的边权
        
        for (const auto& e : edges) {
            if (uf.unite(e.u, e.v)) {
                mstEdges.push_back(e.w);
                if (mstEdges.size() == P - 1) break;
            }
        }
        // 答案:MST中第 (P-S) 条边(0-indexed是P-S-1),即第S大的边
        // 从小到大排序后,去掉最大的S-1条,剩下最大的就是第(P-S)个
        sort(mstEdges.begin(), mstEdges.end());
        double ans = mstEdges[P - S - 1];
        cout << fixed << setprecision(2) << ans;
        return 0;
    }
    

    2026-03-25 来自 江苏

    0
  • kook

    2025-07-10 来自 上海

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页