[题目通道](公路修建 - 洛谷)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5000+10;
struct node{
int x,y;
} a[maxn];
int n;
bool vis[maxn];
double dis[maxn];
double len(int u,int v){
double L;
L=sqrt((a[u].x-a[v].x)*(a[u].x-a[v].x)+(a[u].y-a[v].y)*(a[u].y-a[v].y));
return L;
}
double prim(){
memset(vis,false,sizeof(vis));
double ans=0.0;
dis[1]=0.0;
vis[1]=true;
for(int i=2;i<=n;i++) dis[i]=len(1,i);
for(int i=2;i<=n;i++){
double minv=999999999.0;
int minNod=0;
for(int i=2;i<=n;i++){
if(!vis[i] && dis[i]<minv){
minv=dis[i]; minNod=i;
}
}
vis[minNod]=true; ans+=minv;
for(int i=2;i<=n;i++){
if(!vis[i] && dis[i]>len(minNod,i)) dis[i]=len(minNod,i);
}
}
return ans;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
printf("%.2f\n",prim());
return 0;
}