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);
}