#include <bits/stdc++.h>
#include<stdio.h>
#include<time.h>
using namespace std;
#define maxn 0x7f7f7f7f
#define inf 500
int m[inf];
double e[inf][inf];
double d,ab,bc,ac;
int n,s,t,a,b,cnt;
struct point{
int x,y,city;
}p[inf];
int ping(int z){
return z*z;
}
double dis(point z,point c){
return sqrt(ping(abs(z.x-c.x))+ping(abs(z.y-c.y)));
}
void init(int cnt){
ab=ping(abs(p[cnt-1].x-p[cnt-2].x))+ping(abs(p[cnt-1].y-p[cnt-2].y));
bc=ping(abs(p[cnt-2].x-p[cnt-3].x))+ping(abs(p[cnt-2].y-p[cnt-3].y));
ac=ping(abs(p[cnt-1].x-p[cnt-3].x))+ping(abs(p[cnt-1].y-p[cnt-3].y));
if(ab==ac+bc){p[cnt].x=p[cnt-1].x+p[cnt-2].x-p[cnt-3].x;p[cnt].y=p[cnt-1].y+p[cnt-2].y-p[cnt-3].y;}
if(bc==ac+ab){p[cnt].x=p[cnt-2].x+p[cnt-3].x-p[cnt-1].x;p[cnt].y=p[cnt-2].y+p[cnt-3].y-p[cnt-1].y;}
if(ac==ab+bc){p[cnt].x=p[cnt-1].x+p[cnt-3].x-p[cnt-2].x;p[cnt].y=p[cnt-1].y+p[cnt-3].y-p[cnt-2].y;}
}
void floyd(){
for(int k=1;k<=4*s;k++){
for(int i=1;i<=4*s;i++){
for(int j=1;j<=4*s;j++){
e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
}
}
}
}
void clear(){
for(int i=1;i<=inf;i++){
p[i].city=p[i].x=p[i].y=0;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s>>t>>a>>b;
clear();
for(int j=1;j<=s;j++){
cin>>p[4*j-3].x>>p[4*j-3].y>>p[4*j-2].x>>p[4*j-2].y>>p[4*j-1].x>>p[4*j-1].y;
init(4*j);
p[4*j].city=p[4*j-1].city=p[4*j-2].city=p[4*j-3].city=j;
cin>>m[j];
}
for(int j=1;j<=4*s;j++){
for(int k=1;k<=4*s;k++){
if(k==j)e[j][k]=0;
else if(p[k].city==p[j].city)e[j][k]=dis(p[k],p[j])*m[p[k].city];
else e[j][k]=dis(p[k],p[j])*t;
}
}
floyd();d=maxn;
for(int j=a*4;j>(a-1)*4;j--){
for(int k=b*4;k>(b-1)*4;k--){
d=min(e[j][k],d);
}
}
printf("%.1lf\n",d);
}
}
#2数据
1
3 10 1 3
2 2 2 1 1 2 10
2 12 12 2 22 12 1
22 22 22 32 32 22 10
214.1
本地机结果214.1,洛谷wa