比赛 20091111 评测结果 AEAAAAAEEE
题目名称 建造路径 最终得分 60
用户昵称 maxiem 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2009-11-11 11:57:58
显示代码纯文本
program roads;
var
  p:array [1..1000] of record
    x,y:longint;
  end;
  table:array [1..1000,1..1000] of extended;
  low:array [1..1000] of extended;
  flag:array [1..1000] of boolean;
  tmp,a,b,i,j,k,n,m:longint;
  min,sum:extended;
begin
  assign (input,'roads.in');
  reset (input);
  readln (n,m);
  for i:=1 to n do for j:=1 to n do table[i,j]:=1000000000.0;
  for i:=1 to n do readln (p[i].x,p[i].y);
  for i:=1 to n-1 do for j:=i+1 to n do begin
    tmp:=sqr(p[i].x-p[j].x)+sqr(p[i].y-p[j].y);
    table[i,j]:=sqrt(tmp);
    table[j,i]:=table[i,j];
  end;
  for i:=1 to m do begin
    readln (a,b);
    table[a,b]:=0;
    table[b,a]:=0;
  end;
  for i:=1 to n do low[i]:=table[1,i];
  k:=1;flag[1]:=true;
  for i:=1 to n-1 do begin
    min:=maxlongint;
    for j:=1 to n do if (low[j]<min) and (flag[j]=false) then begin
      min:=low[j];
      k:=j;
    end;
    sum:=sum+min;
    flag[k]:=true;
    for j:=1 to n do if table[k,j]<low[j] then low[j]:=table[k,j];
  end;
  fillchar (flag,sizeof(flag),0);
  close (input);
  assign (output,'roads.out');
  rewrite (output);
  writeln (sum:0:2);
  close (output);
end.