1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
#include<iostream> #include<stdio.h> #include<algorithm> #include<math.h> using namespace std; int f[120]; typedef struct dao { int a; int b; double dis; } dao; bool cmd(dao a,dao b) { return a.dis <b.dis; } int find(int n) { return f[n]==n?n:f[n]=find(f[n]); } void init() { for(int i=0; i<120; i++) f[i]=i; } bool heb(int a,int b) { int fa=find(a),fb=find(b); if(fa!=fb) { f[fa]=fb; return true; } return false; } int main() { int t,c; while(cin>>t) { while(t--) { dao s[10005]; cin>>c; double x[101],y[101]; for(int i=0; i<c; i++) cin>>x[i]>>y[i]; int k=1; for(int i=0; i<c-1; i++) { for(int j=i+1; j<c; j++) { double num=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]); if(num>=100&&num<=1000000) { s[k].a =i; s[k].b =j; s[k].dis =sqrt(num); k++; } } } sort(s,s+k,cmd); init(); double sum=0; int flag=0; for(int i=0; i<k; i++) { if(heb(s[i].a,s[i].b )) { sum+=s[i].dis ; flag++; } } if(flag==c-1) printf("%.1lf\n",sum*100); else cout<<"oh!"<<endl; } } return 0; } |