题目很烦。刷pascal的。
program aa;
const maxlongin=1000000000;
var k,n,s,t,b,e,i,j,cc,z,xmid,ymid,x4,y4:longint;
ans:real;
map:array[1..100,1..100] of real;
dis:array[1..500] of real;
x,y:array[1..500] of longint;
pd:array[1..500] of boolean;
a:array[1..10000] of longint;
procedure cac(x1,y1,x2,y2,x3,y3:longint);
begin
if (y2-y1)*(y2-y3)+(x2-x1)*(x2-x3)=0 then
begin
xmid:=(x1+x3);ymid:=(y1+y3);
x4:=xmid-x2;y4:=ymid-y2;
end
end;
function dist(p,q:longint):real;
begin
exit(sqrt(sqr(abs(x[p]-x[q]))+sqr(abs(y[p]-y[q]))));
end;
procedure cl;
var x1,x2,x3,y1,y2,y3,i,j:longint;
begin
read(x1,y1,x2,y2,x3,y3,cc);
cac(x1,y1,x2,y2,x3,y3);
cac(x2,y2,x1,y1,x3,y3);
cac(x1,y1,x3,y3,x2,y2);
inc(n);x[n]:=x1;y[n]:=y1;
inc(n);x[n]:=x2;y[n]:=y2;
inc(n);x[n]:=x3;y[n]:=y3;
inc(n);x[n]:=x4;y[n]:=y4;
for i:=n-3 to n do
for j:=n-3 to n do
begin
map[i,j]:=dist(i,j)*cc;
map[j,i]:=dist(i,j)*cc;
end;
end;
procedure spfa(b:longint);
var f,r,i:longint;
begin
fillchar(pd,sizeof(pd),false);
for i:=1 to n do dis[i]:=maxlongin;
dis[b]:=0;
f:=1;r:=1;a[f]:=b;pd[b]:=true;
repeat
for i:=1 to n do
if (dis[i]>dis[a[f]]+map[a[f],i]) and (i<>a[f]) then
begin
dis[i]:=dis[a[f]]+map[a[f],i];
if pd[i]=false then
begin
inc(r);
a[r]:=i;
pd[i]:=true;
end;
end;
pd[a[f]]:=false;
inc(f);
until f>r;
end;
begin
read(z);
for k:=1 to z do
begin
ans:=maxlongint;
read(s,t,b,e);
for i:=1 to s do
cl;
for i:=1 to n do
for j:=1 to n do
if (i-1) div 4<>(j-1) div 4 then
begin
map[i,j]:=dist(i,j)*t;
map[j,i]:=dist(i,j)*t;
end;
for i:=(b-1)*4+1 to b*4 do
begin
spfa(i);
for j:=(e-1)*4+1 to e*4 do
if dis[j]<ans then ans:=dis[j];
end;
writeln(ans:0:1);
end;
end.