@[junyu33](/user/231677)
我也是
# 代码
```cpp
#include<cmath>
#include<cstdio>
#include<iomanip>
#include<memory.h>
#include<iostream>
using namespace std;
struct node{
// int x1,y1,x2,y2,x3,y3,x4,y4,v;
double x[5],y[5];
int v;
};
const int MAXN=105;
int n,S,t,a,b;
double map[MAXN*4][MAXN*4],dis[MAXN*4]/*,dis1[MAXN*4]*/,ans;
bool vis[MAXN*4];
node c[MAXN];
double juli(double x1,double y1,double x2,double y2){
return sqrt(pow(x1-x2,2)+pow(y1-y2,2));
}
double dijkstra(int s,int e){
memset(vis,0,sizeof(vis));
memset(dis,0x7f,sizeof(dis));
for(int i=1;i<=S*4;i++){
dis[i]=map[s][i];
}
vis[s]=true;
dis[s]=0;
for(int i=1;i<=S*4;i++){
int mind=1e9;
int minj=0;
for(int j=1;j<=S*4;j++){
if(!vis[j] && mind>dis[j]){
mind=dis[j];
minj=j;
}
}
vis[minj]=true;
for(int j=1;j<=S*4;j++){
dis[j]=min(dis[j],mind+map[minj][j]);
}
}
return min(min(dis[(e-1)*4+1],dis[(e-1)*4+2]),min(dis[(e-1)*4+3],dis[(e-1)*4+4]));
}
int main(){
// freopen("route.in","r",stdin);
// freopen("route.ans","w",stdout);
cin>>n;
while(n--){
ans=1e9;
memset(vis,0,sizeof(vis));
memset(dis,0x7f,sizeof(dis));
memset(map,0x7f,sizeof(map));
cin>>S>>t>>a>>b;
for(int i=1;i<=S;i++){
cin>>c[i].x[1]>>c[i].y[1]>>c[i].x[2]>>c[i].y[2]>>c[i].x[3]>>c[i].y[3]>>c[i].v;
if(juli(c[i].x[1],c[i].y[1],c[i].x[2],c[i].y[2])<=juli(c[i].x[1],c[i].y[1],c[i].x[3],c[i].y[3])){
if(juli(c[i].x[3],c[i].y[3],c[i].x[2],c[i].y[2])<juli(c[i].x[1],c[i].y[1],c[i].x[3],c[i].y[3])){
c[i].x[4]=c[i].x[3]-(c[i].x[2]-c[i].x[1]);
c[i].y[4]=c[i].y[3]-(c[i].y[2]-c[i].y[1]);
map[(i-1)*4+3][(i-1)*4+1]=map[(i-1)*4+1][(i-1)*4+3]=juli(c[i].x[1],c[i].y[1],c[i].x[3],c[i].y[3])*double(c[i].v);
map[(i-1)*4+4][(i-1)*4+2]=map[(i-1)*4+2][(i-1)*4+4]=juli(c[i].x[2],c[i].y[2],c[i].x[4],c[i].y[4])*double(c[i].v);
}
else{
c[i].x[4]=c[i].x[3]-(c[i].x[1]-c[i].x[2]);
c[i].y[4]=c[i].y[3]-(c[i].y[1]-c[i].y[2]);
map[(i-1)*4+3][(i-1)*4+2]=map[(i-1)*4+2][(i-1)*4+3]=juli(c[i].x[2],c[i].y[2],c[i].x[3],c[i].y[3])*double(c[i].v);
map[(i-1)*4+4][(i-1)*4+1]=map[(i-1)*4+1][(i-1)*4+4]=juli(c[i].x[1],c[i].y[1],c[i].x[4],c[i].y[4])*double(c[i].v);
}
}
else{
if(juli(c[i].x[3],c[i].y[3],c[i].x[2],c[i].y[2])<juli(c[i].x[1],c[i].y[1],c[i].x[2],c[i].y[2])){
c[i].x[4]=c[i].x[2]-(c[i].x[3]-c[i].x[1]);
c[i].y[4]=c[i].y[2]-(c[i].y[3]-c[i].y[1]);
map[(i-1)*4+2][(i-1)*4+1]=map[(i-1)*4+1][(i-1)*4+2]=juli(c[i].x[1],c[i].y[1],c[i].x[2],c[i].y[2])*double(c[i].v);
map[(i-1)*4+4][(i-1)*4+3]=map[(i-1)*4+3][(i-1)*4+4]=juli(c[i].x[3],c[i].y[3],c[i].x[4],c[i].y[4])*double(c[i].v);
}
else{
c[i].x[4]=c[i].x[2]-(c[i].x[1]-c[i].x[3]);
c[i].y[4]=c[i].y[2]-(c[i].y[1]-c[i].y[3]);
map[(i-1)*4+3][(i-1)*4+2]=map[(i-1)*4+2][(i-1)*4+3]=juli(c[i].x[2],c[i].y[2],c[i].x[3],c[i].y[3])*double(c[i].v);
map[(i-1)*4+4][(i-1)*4+1]=map[(i-1)*4+1][(i-1)*4+4]=juli(c[i].x[1],c[i].y[1],c[i].x[4],c[i].y[4])*double(c[i].v);
}
}
}
for(int i=1;i<=S;i++){
for(int j=i+1;j<=S;j++){
for(int k=1;k<=4;k++){
for(int l=1;l<=4;l++){
map[(j-1)*4+l][(i-1)*4+k]=map[(i-1)*4+k][(j-1)*4+l]=juli(c[i].x[k],c[i].y[k],c[j].x[l],c[j].y[l])*t;
}
}
}
}
ans=min(ans,min(min(dijkstra((a-1)*4+1,b),dijkstra((a-1)*4+2,b)),min(dijkstra((a-1)*4+3,b),dijkstra((a-1)*4+4,b))));
cout<<fixed<<setprecision(1)<<ans;
cout<<'\n';
}
return 0;
}
```
by zhangyuanxiao @ 2022-08-15 07:54:05