#include #include #include #include #include #include #include #include #include using namespace std; #pragma optimize("",off) #define for if(0);else for typedef complex pt; struct cedge { int v1, v2; double c; cedge() {} cedge(int v1, int v2, double c) : v1(v1), v2(v2), c(c) {} }; inline bool operator < (const cedge& a, const cedge& b) { return a.c > b.c; } static inline void AddVert(const vector& points, vector& S, priority_queue& Q, int v) { S[v] = true; for(int i = 0; i < points.size(); i++) { if(!S[i]) Q.push(cedge(v, i, abs(points[i] - points[v]))); } } double solve(const vector& points) { if(points.empty()) return 0; vector S(points.size(), false); int size = 0; double total = 0; priority_queue Q; AddVert(points, S, Q, 0), size++; //cout << "hoge" << endl; while(size < points.size()) { cedge c = Q.top(); Q.pop(); if(S[c.v2]) continue; total += c.c; AddVert(points, S, Q, c.v2), size++; } return total; } int main() { int N; cin >> N; vector points; while(N--) { double x, y; cin >> x >> y; points.push_back(pt(x, y)); } double len = solve(points); char buffer[32]; sprintf(buffer, "%.3f", len); cout << buffer << endl; return 0; }