| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
What's Wrong?!#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
struct point
{
__int64 x,y;
}p[1010];
const int ns = 1010;
int n, m, inTree[ns];
double weight[ns][ns], d[ns];
void updateDistances(int target) {
for (int i = 0; i < n; ++i)
if(i!=target && d[i] > weight[target][i])
d[i] = weight[target][i];
}
double dist(__int64 x1,__int64 y1,__int64 x2, __int64 y2)
{
return sqrt(double((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
}
int main()
{
double total = 0;
int i, j, x, y, min, treeSize=0;
cin >> n >> m;
for (i = 0; i < n; ++i)
cin >> p[i].x >> p[i].y;
for (i = 0; i < n; ++i)
{
d[i] = 10000000.0 * 10000000.0;
inTree[i] = 0;
}
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
weight[i][j] = weight[j][i] = dist( p[i].x, p[i].y, p[j].x, p[j].y );
for (i = 0; i < m; ++i)
{
cin >> x >> y;
x-=1,y-=1;
weight[x][y] = weight[x][y] = 0.0;
}
inTree[0]=1;
updateDistances(0);
for ( treeSize=1; treeSize < n; ++treeSize) {
min = -1;
for (i = 0; i < n; ++i)
if (!inTree[i])
if (min == -1 || d[min] > d[i])
min = i;
total += d[min];
inTree[min] = 1;
updateDistances(min);
}
printf("%0.2lf\n",total);
// system("pause");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator