pku2349

来源:互联网 发布:linux查找log日志命令 编辑:程序博客网 时间:2024/05/01 06:37

/*
 * File:   pku2349.cpp
 * Author: chenjiang
 *
 * Created on 2010年4月2日, 下午6:13
 */

#include <stdlib.h>
#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
#define inf 1e300
#define Max_V 505
int link[Max_V], s, p;
double c[Max_V][Max_V],edge[Max_V];
bool visited[Max_V];
int E;
struct Point
{
    double x,y;
}point[Max_V];
void Prim(int n) {
    int i, j, cnt;
    double sum, min;
    link[1] = 1;
    visited[1] = 1;
    cnt = 1;
    E=0;
    sum = 0.0;
    while (cnt != n) {
        cnt++;
        min = inf;
        for (i = 1; i < cnt; i++)//已经连上的点
        {
            for (j = 1; j <= n; j++)//没有连上的点
            {
                if (!visited[j]) {
                    if (c[link[i]][j] < min) {
                        link[cnt] = j;
                        min = c[link[i]][link[cnt]];
                    }
                }
            }
        }
        edge[++E]=min;
        //sum += min;
        visited[link[cnt]] = 1;
    }
   // return sum;
}
double dis(Point a,Point b)
{
    return fabs((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
/*
 *
 */
int main(int argc, char** argv) {

    int i,j,ca;
    //freopen("a.in","r",stdin);
    cin>>ca;
    while(ca--)
    {
        cin>>s>>p;
        for(i=1;i<=p;i++)
        {
            cin>>point[i].x>>point[i].y;
            for(j=1;j<i;j++)
            {
                c[i][j]=c[j][i]=dis(point[i],point[j]);
               // printf("c[%d][%d]=%d/n",i,j,c[i][j]);
            }
            c[i][j]=inf;
        }
        memset(visited,0,sizeof(visited));
        Prim(p);
       
        sort(edge+1,edge+E+1);
        //cout<<sqrt(edge[s])<<endl;
        printf("%.2lf/n",sqrt(edge[p-s]));
    }
    return (EXIT_SUCCESS);
}

 

原创粉丝点击