#include <bits/stdc++.h> using namespace std; int n; double x[105],y[105]; double d[105]; int used[105]; double ma[105][105]; double mst(){ d[0] = 0.0; double ans = 0.0; for(int i = 0;i < n;i++){ double min = DBL_MAX; int minn; for(int j = 0;j < n;j++){ if(!used[j] && d[j] < min){ min = d[j]; minn = j; } } used[minn] = 1; ans += min; for(int j = 0;j < n;j++){ if(!used[j] && d[j] > ma[minn][j]){ d[j]= ma[minn][j]; } } } return ans; } int main(){ int t; cin >> t; while(t--){ cin >> n; for(int i = 0;i < n;i++){ scanf("%lf%lf",&x[i],&y[i]); } for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ ma[i][j] = sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j])); } } for(int i = 0;i < n+1;i++){ d[i] = DBL_MAX; } memset(used,0,sizeof(used)); printf("%.2f\n",mst()); if(t){ printf("\n"); } } return 0; }
时间: 2024-10-11 06:53:19