比赛 20091111 评测结果 AWWWWWWWWW
题目名称 建造路径 最终得分 10
用户昵称 chengyang 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2009-11-11 10:56:30
显示代码纯文本
program roads;
var
  map:array[0..1001,0..1001]of double;
  f:array[0..1001]of boolean;
  v:array[0..1001]of double;
  a:array[0..1001,1..2]of real;
  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 m do begin
    readln(j,k);
    map[j,k]:=0; map[k,j]:=0;
  end;
  for i:=1 to n do begin
    for j:=1 to n do begin
    if (map[i,j]<>0) and(i<>j)then  map[i,j]:=sqrt((a[i,1]-a[j,1])*(a[i,1]-a[j,1])+(a[i,2]-a[j,2])*(a[i,2]-a[j,2]));
   end;
  end;
  v[1]:=0;
  for i:=2 to n do v[i]:=map[1,i];
  f[1]:=false;
  for i:=1 to n-1 do begin
    min:=999999999;
    for j:=1 to n do begin
      if (f[j])and(v[j]<min) then begin
        min:=v[j];
        k:=j;
      end;
    end;
    f[k]:=false;
    for j:=1 to n do if (map[k,j]<v[j]) then v[j]:=map[k,j];
  end;
  min:=0;
  for i:=1 to n do min:=min+v[i];
  writeln(min:0:2);
  close(input); close(output);
end.