记录编号 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;
}