#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <cmath>
using namespace std;
const int minn=1e-6;
int pre[105];
struct unit{
int u,v;
double w;
int k;
}village[10005];
bool compare(unit a,unit b){
return a.w<b.w;
}
int find(int x){
return pre[x]==x?x:pre[x]=find(pre[x]);
}
void join(int a,int b){
pre[b]=a;
}
double change(int x1,int y1,int x2,int y2){
return sqrt(pow(x1-x2,2)+pow(y1-y2,2));
}
int main(){
int i,j,k,c,t;
scanf("%d",&t);
while(t--){
scanf("%d",&c);
double width[10005][2];
for(i=1;i<=c;i++){
pre[i]=i;
scanf("%lf%lf",&width[i][0],&width[i][1]);
}
int road=1;
for(i=1;i<c;i++){
for(j=i+1;j<=c;j++){
village[road].u=i;
village[road].v=j;
village[road].w=change(width[i][0],width[i][1],width[j][0],width[j][1]);
road++;
}
}
sort(village+1,village+1+road,compare);
double result=0;
k=0;
for(i=1;i<=road;i++){
int a=find(village[i].u),b=find(village[i].v);
if(a!=b&&village[i].w-10>=minn&&1000-village[i].w>=minn){
join(a, b);
result += village[i].w;
k++;
}
}
if(k==c-1){
printf("%.1lf\n",result*100.0);
}else{
printf("oh!\n");
}
}
return 0;
}
hdoj1875 畅通工程再续
最新推荐文章于 2019-04-10 20:10:52 发布