显示代码纯文本
program roads;
var
map:array[0..1001,0..1001]of real;
f:array[0..1001]of boolean;
v:array[0..1001]of real;
a:array[0..1001,1..2]of real;
q,n,m,i,j,k,l:longint;
min:double;
begin
assign(input,'roads.in');
assign(output,'roads.out');
reset(input); rewrite(output);
readln(n,m);
fillchar(v,sizeof(v),0);
fillchar(f,sizeof(f),0);
fillchar(a,sizeof(a),0);
for i:=1 to n+1 do begin
for j:=1 to n+1 do map[i,j]:=999999999;
end;
for i:=1 to n do readln(a[i,1],a[i,2]);
for i:=1 to n do
for j:=1 to n do
map[i,j]:=sqrt(sqr(a[i,1]-a[j,1])+sqr(a[i,2]-a[j,2]));
for i:=1 to m do begin
readln(j,k);
map[j,k]:=0; map[k,j]:=0;
end;
for i:=1 to n do
begin
v[i]:=9999999999;
map[i,i]:=0;
end;
v[1]:=0;
fillchar(f,sizeof(f),true);
f[1]:=false;
q:=1;
for i:=1 to n-1 do begin
min:=99999999999;
for j:=1 to n do
if (f[j])and(v[j]>map[q,j]) then v[j]:=map[q,j];
for j:=1 to n do
if f[j]and(v[j]<min) then
begin
min:=v[j];
k:=j;
end;
f[k]:=false;
q:=k;
end;
min:=0;
for i:=1 to n do min:=min+v[i];
writeln(min:0:2);
close(input); close(output);
end.