1 条题解

  • 0
    @ 2025-2-14 21:30:05

    C++ :

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #define INF 999999.0
    using namespace std;
    
    struct Outpost{
        int x, y;
    }O[501];
    int cmp(double a, double b){
        return a > b;
    }
    int s, p;
    double dist[501][501], d[501];
    char vis[501];
    void prim(){
        int i, j, k, mini, minj;
        double min;
        vis[1] = mini = 1;
        for(i = 1; i <= p; i++){
            min = INF;
            for(j = 1; j <= p; j++){
                if(!vis[j]){
                    if(dist[mini][j] < d[j]){
                        d[j] = dist[mini][j];
                    }
                    if(d[j] < min){
                        min = d[j];
                        minj = j;
                    }
                }
            }
            mini = minj;
            vis[mini] = 1;
        }
    }
    int main(){
        int k, i, j, x, y;
        scanf("%d", &k);
        while(k--){
            scanf("%d%d", &s, &p);
            memset(vis, 0, sizeof(vis));
            memset(O, 0, sizeof(O));
            for(i = 1; i <= p; i++){
                scanf("%d%d", &O[i].x, &O[i].y);
                d[i] = INF;
            }
            for(i = 1; i <= p; i++){
                for(j = 1; j <= i; j++){
                    x = O[i].x-O[j].x;
                    y = O[i].y-O[j].y;
                    dist[i][j] = dist[j][i] = sqrt(x*x + y*y);
                }
            }
            prim();
            sort(d+1, d+p+1);
            printf("%.2f\n", d[p-s]);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    950
    时间
    2000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者