#include "iostream"
#include "stdio.h"
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <string.h>
#include <stack>
#include <ctype.h>
#include <functional>
#include <math.h>
using namespace std;
//1446
struct edge{
int a,b;
double dis;
bool operator < (const edge &a) const{
return dis<a.dis;
}
}edge[5000];
struct point{
double x,y;
double getDis(point A){
return sqrt( (x-A.x)*(x-A.x)+(y-A.y)*(y-A.y) );
}
}point[101];
int t[110];
int findRoot(int a){
if(t[a]==a) return a;
else{
int tmp=findRoot(t[a]);
t[a]=tmp;
return tmp;
}
}
int main(){
int n,size;
//freopen("input.txt","r",stdin);
while(cin>>n){
for(int i=1;i<=n;i++){
cin>>point[i].x>>point[i].y;
}
size=0;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
edge[size].a=i,edge[size].b=j;
edge[size++].dis=point[i].getDis(point[j]);
}
}
sort(edge,edge+size);
for(int i=1;i<=n;i++) t[i]=i;
double res=0.0;
for(int i=0;i<size;i++){
int a=findRoot(edge[i].a);
int b=findRoot(edge[i].b);
if(a!=b){
t[a]=b;
res+=edge[i].dis;
}
}
printf("%.2lf\n",res);
}
return 0;
}
/**************************************************************
Problem: 1144
User: cust123
Language: C++
Result: Accepted
Time:10 ms
Memory:1600 kb
****************************************************************/
题目1144:Freckles
最新推荐文章于 2024-08-20 14:25:41 发布