poj 2560Freckles (krusual)

来源:互联网 发布:医疗数据分析建模 编辑:程序博客网 时间:2024/04/29 11:28
点击打开链接
#include"stdio.h"#include"math.h"#include"stdlib.h"int set[5001];struct node{double x,y,point;}aa[5001];int cmp(const void*a,const void*b){return (*(struct node*)a).point>(*(struct node*)b).point?1:-1;}int find(int x){int r,i;r=x;while(set[r]!=r)r=set[r];while(set[x]!=r){i=set[x];set[x]=r;x=i;}return r;}int main(){int i,j,k,n,x,y;double t,xx[101],yy[101],ans;while(scanf("%d",&n)!=-1){for(i=0;i<=5000;i++)set[i]=i;for(i=0;i<n;i++)scanf("%lf%lf",&xx[i],&yy[i]);k=0;for(i=0;i<n;i++){for(j=i+1;j<n;j++){t=sqrt((xx[i]-xx[j])*(xx[i]-xx[j])+(yy[i]-yy[j])*(yy[i]-yy[j]));aa[k].x=i;aa[k].y=j;aa[k++].point=t;}}ans=0;qsort(aa,k,sizeof(aa[0]),cmp);for(i=0;i<k;i++){x=find(aa[i].x);y=find(aa[i].y);if(x!=y){ans+=aa[i].point;set[x]=y;}}printf("%.2f\n",ans);}return 0;}