UVA 10034 Freckls

来源:互联网 发布:知进退明得失的意思 编辑:程序博客网 时间:2024/05/16 12:08
#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>using namespace std;double map[101][101];double lis[101][2],mincost[101];bool vis[101];int n,pre[101];inline double getDist(double x1,double y1,double x2,double y2){return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}double prim(){memset(vis,0,sizeof vis);vis[0]=1;for(int i=1;i<n;i++){mincost[i]=map[0][i];pre[i]=0;}double sum=0;for(int i=0;i<n-1;i++){int u=-1;for(int j=0;j<n;j++)if(!vis[j]){if(u==-1||mincost[j]<mincost[u])u=j;}sum+=map[pre[u]][u];vis[u]=1;for(int j=0;j<n;j++)if(!vis[j]){if(mincost[j]>map[u][j]){mincost[j]=map[u][j];pre[j]=u;}}}return sum;}int main(){int T;scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=0;i<n;i++)scanf("%lf%lf",&lis[i][0],&lis[i][1]);memset(map,0,sizeof map);for(int i=0;i<n;i++){for(int j=0;j<n;j++)if(i!=j){map[i][j]=getDist(lis[i][0],lis[i][1],lis[j][0],lis[j][1]);}}printf("%.2f\n", prim());if(T) printf("\n");}return 0;}