| 记录编号 |
23765 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
325.公路修建 |
最终得分 |
100 |
| 用户昵称 |
王者自由 |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
0.986 s |
| 提交时间 |
2011-03-19 12:05:20 |
内存使用 |
2.25 MiB |
显示代码纯文本
#include <cstdio>
#include <cmath>
#define MAXN 5001
#define INF 1<<28
double h[MAXN], x[MAXN], y[MAXN];
double min;
int n,k, i,j;
bool b[MAXN];
inline double dis(int i, int j) {
return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
void Prim() {
for(i=2; i<=n; i++)
h[i] = INF;
for(j=1; j<n; j++) {
min = INF;
for(i=1; i<=n; i++)
if(h[i] < min && !b[i]) {
min = h[i];
k = i;
}
b[k] = true;
for(i=1; i<=n; i++)
if(!b[i])
if(h[i] > dis(i,k))
h[i] = dis(i,k);
}
}
int main() {
freopen("roadz.in","r",stdin);
freopen("roadz.out","w",stdout);
scanf("%d", &n);
for(i=1; i<=n; i++)
scanf("%lf %lf", x+i, y+i);
Prim();
double ans = 0;
for(i=1; i<=n; i++)
ans += h[i];
printf("%.2lf\n", ans);
return 0;
}