RT……自闭
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cctype>
#include <cmath>
#define ll long long
#define ri register int
template <typename T> inline T min(T x,T y) {return x<y?x:y;}
template <typename T> inline T max(T x,T y) {return x>y?x:y;}
const int INF = 0x3f3f3f3f;
const ll inf = 0x3f3f3f3f3f3f3f3fLL;
const int N = 5010;
int n;
double dis[N],x[N],y[N];
bool vis[N];
double calc(double x1,double y1,double x2,double y2) {
return (double)sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
}
double Prim() {
memset(dis,0x7f,sizeof dis);
dis[1] = 0;
for (int i = 2;i <= n;++i) {
dis[i] = calc(x[1],y[1],x[i],y[i]);
}
double ans = 0;
int now = 1;
for (int tot = 1;tot < n;++tot) {
double minn = INF*1.0;
vis[now] = 1;
for (int i = 1;i <= n;++i) {
double disi = calc(x[now],y[now],x[i],y[i]);
printf("%d %d %lf\n",now,i,disi);
if (!vis[i] && disi < minn) {
minn = disi;
now = i;
}
}
ans += minn;
for (int i = 1;i <= n;++i) {
double w = calc(x[now],y[now],x[i],y[i]);
if (dis[i] > w && !vis[i]) {
dis[i] = w;
}
}
//printf("%lf\n",ans);
}
return ans;
}
signed main() {
scanf("%d",&n);
for (int i = 1;i <= n;++i) scanf("%lf %lf\n",&x[i],&y[i]);
printf("%.2lf",Prim());
return 0;
}