样例过不了,#1 AC,#2345 WA
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
typedef pair<int,double> PID;
typedef pair<double,int> PDI;
struct airport
{
int x,y;
}a[100005];
double dis[100005];
bool vis[100005];
vector<PID> nodes[100005];
priority_queue<PDI,vector<PDI>,greater<PDI> > pq;
PII getd(int xa,int xb,int xc,int ya,int yb,int yc)
{
int xd,yd;
double AB2=(xa-xb)*(xa*xb)+(ya-yb)*(ya-yb);
double AC2=(xa-xc)*(xa*xc)+(ya-yc)*(ya-yc);
double BC2=(xb-xc)*(xb*xc)+(yb-yc)*(yb-yc);
if(AB2+AC2==BC2)xd=xb+xc-xa,yd=yb+yc-ya;
if(AB2+BC2==AC2)xd=xa+xc-xb,yd=ya+yc-yb;
if(AC2+BC2==AB2)xd=xa+xb-xc,yd=ya+yb-yc;
return make_pair(xd,yd);
}
void add(int u,int v,double w)
{
nodes[u].push_back(make_pair(v,w));
nodes[v].push_back(make_pair(u,w));
return;
}
double d(int pa,int pb)
{
return sqrt(double((a[pa].x-a[pb].x)*(a[pa].x-a[pb].x)+(a[pa].y-a[pb].y)*(a[pa].y-a[pb].y)));
}
void dijkstra()
{
pq.push(make_pair(dis[0],0));
while(!pq.empty())
{
int u=pq.top().second;
pq.pop();
if(!vis[u])
{
vis[u]=true;
for(int i=0,len=nodes[u].size();i<len;i++)
{
int v=nodes[u][i].first;
double w=nodes[u][i].second;
if(dis[v]>dis[u]+w)
{
dis[v]=dis[u]+w;
pq.push(make_pair(dis[v],v));
}
}
}
}
return;
}
void solve()
{
int s,A,B;
double t;
scanf("%d %lf %d %d",&s,&t,&A,&B);
for(int i=0;i<=4*s+1;i++)nodes[i].clear();
for(int i=1;i<=s;i++)
{
double T;
scanf("%d %d %d %d %d %lf",&a[i*4-3].x,&a[i*4-3].y,&a[i*4-2].x,&a[i*4-2].y,&a[i*4-1].x,&a[i*4-1].y,&T);
PII G=getd(a[i*4-3].x,a[i*4-3].y,a[i*4-2].x,a[i*4-2].y,a[i*4-1].x,a[i*4-1].y);
a[i*4].x=G.first,a[i*4].y=G.second;
add(i*4-3,i*4-2,d(i*4-3,i*4-2)*T);
add(i*4-3,i*4-1,d(i*4-3,i*4-1)*T);
add(i*4-3,i*4,d(i*4-3,i*4)*T);
add(i*4-2,i*4-1,d(i*4-2,i*4-1)*T);
add(i*4-2,i*4,d(i*4-2,i*4)*T);
add(i*4-1,i*4,d(i*4-1,i*4)*T);
}
for(int i=1;i<=s;i++)for(int j=0;j<=3;j++)for(int k=i*4+1;k<=s*4;k++)add(i*4-j,k,d(i*4-j,k)*t);
nodes[0].push_back(make_pair(4*A-3,0));
nodes[0].push_back(make_pair(4*A-2,0));
nodes[0].push_back(make_pair(4*A-1,0));
nodes[0].push_back(make_pair(4*A,0));
nodes[4*B-3].push_back(make_pair(4*s+1,0));
nodes[4*B-2].push_back(make_pair(4*s+1,0));
nodes[4*B-1].push_back(make_pair(4*s+1,0));
nodes[4*B].push_back(make_pair(4*s+1,0));
memset(vis,false,sizeof(vis));
for(int i=1;i<=4*s+1;i++)dis[i]=INT_MAX/3;
dijkstra();
printf("%.1lf\n",dis[4*s+1]);
return;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)solve();
return 0;
}