【题解】P1027 Car 的旅行路线

题面

题目传送门

前言

口胡 5min,调试 2h

正文

两点间距离公式啊~

直接建图啊~

计算边权啊~

跑个最短路啊~

考虑 floyd 啊~

要开 double 啊~

直接做做完啦~

代码

#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstring>
#define x1 x_1
#define y1 y_1
#define x2 x_2
#define y2 y_2
#define int long long
using namespace std;
const int maxn=128,inf=0x7f7f7f7f;
int s,A,B;
double t;
double x[maxn<<2],y[maxn<<2],T[maxn],dis[maxn][maxn];
inline double ds(double x1,double y1,double x2,double y2){
	return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}
inline void floyd(){
	for(int k=1;k<=s*4;k++){
		for(int i=1;i<=s*4;i++){
			for(int j=1;j<=s*4;j++){
				dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
			} 
		}
	}
	return;
}
signed main(){
	int n;
	scanf("%lld",&n);
    while(n--){
        memset(dis,0,sizeof(dis));
        scanf("%lld%lf%lld%lld",&s,&t,&A,&B);
        for(int i=1;i<=s;i++){
        	scanf("%lf%lf%lf%lf%lf%lf%lf",&x[(i-1)*4+1],&y[(i-1)*4+1],&x[(i-1)*4+2],&y[(i-1)*4+2],&x[(i-1)*4+3],&y[(i-1)*4+3],&T[i]);
            double dab=ds(x[(i-1)*4+1],y[(i-1)*4+1],x[(i-1)*4+2],y[(i-1)*4+2]);
            double dac=ds(x[(i-1)*4+1],y[(i-1)*4+1],x[(i-1)*4+3],y[(i-1)*4+3]);
            double dbc=ds(x[(i-1)*4+2],y[(i-1)*4+2],x[(i-1)*4+3],y[(i-1)*4+3]);
            if(dab+dac==dbc){
            	x[i*4]=x[(i-1)*4+2]+x[(i-1)*4+3]-x[(i-1)*4+1],y[i*4]=y[(i-1)*4+2]+y[(i-1)*4+3]-y[(i-1)*4+1];
			}else if(dab+dbc==dac){
				x[i*4]=x[(i-1)*4+1]+x[(i-1)*4+3]-x[(i-1)*4+2],y[i*4]=y[(i-1)*4+1]+y[(i-1)*4+3]-y[(i-1)*4+2];
			}else if(dbc+dac==dab){
				x[i*4]=x[(i-1)*4+2]+x[(i-1)*4+1]-x[(i-1)*4+3],y[i*4]=y[(i-1)*4+2]+y[(i-1)*4+1]-y[(i-1)*4+3];
			}
		}
		for(int i=1;i<=s*4;i++){
			for(int j=1;j<=s*4;j++){
				if(i!=j){
					if((i-1)/4!=(j-1)/4){
						dis[i][j]=t*sqrt(ds(x[i],y[i],x[j],y[j]));
					}else{
						dis[i][j]=T[(i-1)/4+1]*sqrt(ds(x[i],y[i],x[j],y[j]));
					}
				}
			}
		}
		floyd();
		double ans=inf;
		for(int i=1;i<=4;i++){
			for(int j=1;j<=4;j++){
				ans=min(ans,dis[(A-1)*4+i][(B-1)*4+j]);
			}
		}
		printf("%.1lf\n",ans);
    }
	return 0;
}

后记

不建议抄代码,必须体验这个 rz 的调试过程!

完结撒花!

posted @ 2024-12-26 18:33  sunxuhetai  阅读(5)  评论(0)    收藏  举报