#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define maxx 505
int s,n,k;
int p[maxx];
struct Edge
{
int u,v;
double w;
}edge[maxx*maxx/2];
struct Pos
{
double x,y;
}pos[maxx];
bool cmp(Edge a,Edge b)
{
return a.w<b.w;
}
int findpa(int x)
{
return p[x]==x?x:p[x]=findpa(p[x]);
}
double kruskal()
{
for(int i = 1;i <= n;i ++)
p[i] = i;
sort(edge,edge + k,cmp);
int num = 0;
double ans;
for(int i = 0;i <k ;i ++)
{
int p1 = findpa(edge[i].u);
int p2 = findpa(edge[i].v);
if(p1 != p2)
{
num ++;
p[p1]=p2;
ans=edge[i].w;
//cout<<ans<<endl;
if(num==(n-s))
return ans;
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t --)
{
k=0;
scanf("%d%d",&s,&n);
for(int i = 1;i <= n;i ++)
scanf("%lf%lf",&pos[i].x,&pos[i].y);
for(int i = 1;i <= n;i ++)
for(int j = i+1;j <= n;j ++)
{
edge[k].u = i;
edge[k].v = j;
edge[k].w = sqrt(pow((pos[i].x - pos[j].x),2) + pow((pos[i].y - pos[j].y),2));
//cout<<edge[k].w<<endl;
k ++;
}
double ans = kruskal();
printf("%.2lf\n",ans);
}
return 0;
}
POJ 2349
最新推荐文章于 2021-03-08 10:40:19 发布