#include<iostream>
#include<map>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
map<int,int> mp;
struct node{
int x,y ;
double z;
}a[200010];
bool cmp(node a,node b){
return a.z<b.z;
}
int n,m,cnt;
double ans[10010],l[10010][2];
double dist(double a1, double a2, double b1, double b2) {
return sqrt(pow(fabs(a1 - b1), 2) + pow(fabs(a2 - b2), 2));
}
int f(int x){
if(mp[x]==x)return x;
mp[x]=f(mp[x]);
return mp[x];
}
void marge(int a,int b){
mp[f(a)]=f(b);
}
int main() {
int t;
cin>>t;
while(t--) {
cin>>n>>m;
cnt=0;
memset(a,0,sizeof(a));
memset(ans,0,sizeof(ans));
if(n>=m) {
cout<<"0.00"<<endl;
continue;
}
for(int i=1;i<=m;i++)mp[i]=i;
for(int i=1;i<=m;i++){
cin>>l[i][0]>>l[i][1];
}
int cc=0;
for(int i=1;i<=m;i++) {
for(int j=i+1;j<=m;j++) {
double ch=0;
ch=dist(l[i][0],l[i][1],l[j][0],l[j][1]);
node tmp;
tmp.x=i,tmp.y=j,tmp.z=ch;
a[++cc]=tmp;
}
}
sort(a+1,a+1+cc,cmp);
for(int i=1;i<=cc;i++){
if(mp[f(a[i].x)]!=mp[f(a[i].y)]){
marge(a[i].x,a[i].y);
ans[++cnt]=a[i].z;
}
}
printf("%.2lf\n",ans[cnt-n+1]);
}
}
vjudge上交了
锣鼓爆0?????????????????????????????????????????(数不尽的?)