2349Arctic Network{最小生成…

var
  c,s,p,i:longint;
  x,y:array[1..500] of longint;
  w:array[1..500,1..500] of real;
  d:array[1..500] of real;
  used:array[1..500] of boolean;
procedure init;
var
  i,j:longint;
begin
  fillchar(x,sizeof(x),0);
  fillchar(y,sizeof(y),0);
  fillchar(w,sizeof(w),0);
  fillchar(d,sizeof(d),0);
  fillchar(used,sizeof(used),false);
  read(s,p);
  for i:=1 to p do
    read(x[i],y[i]);
  for i:=1 to p do
    for j:=1 to p do
      w[i,j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
end;
procedure prim(s:longint);
var
  i,k,pos:longint;
  min:real;
begin
  for i:=1 to p do
    d[i]:=w[s,i];
  used[s]:=true;
  for k:=1 to p-1 do
    begin
      min:=maxlongint;
      for i:=1 to p do
        if (not used[i]) and (d[i]
          begin
            min:=d[i];
            pos:=i;
          end;
      used[pos]:=true;
      for i:=1 to   p do
        if (not used[i]) and (d[i]>w[pos,i]) then
          d[i]:=w[pos,i]
    end;
end;
procedure swap(var a,b:real);
var
  t:real;
begin
  t:=a;a:=b;b:=t;
end;
procedure qsort(l,r:longint);
var
  i,j:longint;
  m:real;
begin
  i:=l;
  j:=r;
  m:=d[(l+r) shr 1];
  repeat
    while d[i]>m do inc(i);
    while d[j]
    if i<=j then
      begin
        swap(d[i],d[j]);
        inc(i);
        dec(j);
      end;
  until i>j;
  if j>l then qsort(l,j);
  if i
end;
procedure main;
var
  i:longint;
begin
  prim(1);
  qsort(1,p);
  writeln(d[s]:0:2);
end;
begin
  read(c);
  for i:=1 to c do
    begin
      init;
      main;
    end;
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值