10034 - Freckles 克鲁斯克尔最小生成树!~


/*
10034 - Freckles
克鲁斯克尔最小生成树!~ 
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;

struct node{
   double x, y;
};

struct tree{
   int u, v;
   double d;
};

node nd[105];
int f[105];
tree tt[5010];

bool cmp(tree a, tree b){
   return a.d < b.d;
}

int getFather(int x){
   return x==f[x] ? x : f[x]=getFather(f[x]);
}

int Union(int a, int b){
   int fa=getFather(a), fb=getFather(b);
   if(fa!=fb){
      f[fa]=fb;
      return 1;
   }
   return 0;
} 

int main(){
   int t;
   cin>>t;
   while(t--){
      int n;
      cin>>n;
      for(int i=1; i<=n; ++i){
         cin>>nd[i].x>>nd[i].y;
         f[i]=i;
      }
      int cnt=0;
      for(int i=1; i<n; ++i)
         for(int j=i+1; j<=n; ++j){
            tt[cnt].u=i;
            tt[cnt].v=j;
            tt[cnt++].d=sqrt((nd[i].x-nd[j].x)*(nd[i].x-nd[j].x) + (nd[i].y-nd[j].y)*(nd[i].y-nd[j].y)); 
         }
      sort(tt, tt+cnt, cmp);
      double sum=0.0;
      for(int i=0; i<cnt; ++i){
         if(Union(tt[i].u, tt[i].v))
            sum+=tt[i].d;
      }
      printf("%.2lf\n", sum);
      if(t) printf("\n");
   }
}

上一篇:Android源码解析-仿今日头条PagerSlidingTabStrip滑动页面导航效果


下一篇:一起谈.NET技术,构建高性能ASP.NET站点之优化HTTP请求