比赛 |
20110318 |
评测结果 |
AAAAAAAAAA |
题目名称 |
公路修建 |
最终得分 |
100 |
用户昵称 |
苏轼 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-03-18 19:59:19 |
显示代码纯文本
#include <fstream>
#include <cstdio>
#include <cmath>
using namespace std;
int main ()
{
ifstream fin("roadz.in");
FILE *fout = fopen("roadz.out", "w");
int N;
fin >> N;
bool boo[N];
double dist[N];
struct {
double x, y;
} city[N];
#define DIST(X,Y) sqrt((city[X].x-city[Y].x)*(city[X].x-city[Y].x)+(city[X].y-city[Y].y)*(city[X].y-city[Y].y))
for (int i=0; i<N; i++)
{
fin >> city[i].x >> city[i].y;
dist[i] = DIST(i,0);
boo[i] = false;
}
double ans = 0.0;
for (int i=0; i<N; i++)
{
double mp = 100000000.0;
int k;
for (int j=0; j<N; j++)
if (dist[j]<mp && !boo[j])
{
k = j;
mp = dist[j];
}
boo[k] = true;
ans += dist[k];
for (int j=1; j<=N; j++)
{
double tp;
if (!boo[j] && dist[j]>(tp=DIST(k,j)))
dist[j] = tp;
}
}
fprintf(fout, "%.2f\n", ans);
fin.close();
fclose(fout);
return 0;
}