1 /*
2 用kuskal会被卡
3 一边prim一边算两点间距离(边权)
4 否则会MLE
5 另:不开long long见祖宗
6 */
7 #include<bits/stdc++.h>
8 using namespace std;
9 const int maxn=5005;
10 const int INF=0x3f3f3f3f;
11 typedef pair<double,int> P;
12 priority_queue< P,vector<P>,greater<P> >q;
13 bool v[maxn];
14 int n,m;
15 double ans,dis[maxn];
16 struct point{int x,y;}d[maxn];
17 double Dis(const point &x,const point &y){return sqrt((long long)(x.x-y.x)*(x.x-y.x)+(long long)(x.y-y.y)*(x.y-y.y));}
18 void prim()
19 {
20 fill(dis,dis+1+n,INF);dis[1]=0;
21 q.push(make_pair(0,1));
22 while(!q.empty())
23 {
24 int Top=q.top().second;q.pop();
25 if(v[Top]) continue;ans+=dis[Top];v[Top]=1;
26 for(int i=1;i<=n;++i)
27 {
28 if(!v[i])
29 {
30 double tmp=Dis(d[i],d[Top]);
31 if(tmp<dis[i])
32 {
33 dis[i]=tmp;
34 q.push(make_pair(dis[i],i));
35 }
36 }
37 }
38 }
39 }
40 int main()
41 {
42 scanf("%d",&n);
43 for(int i=1;i<=n;++i) scanf("%d%d",&d[i].x,&d[i].y);
44 prim();
45 printf("%.2lf",ans);
46 return 0;
47 }