蓝桥杯 Car的旅行路线 (预处理+最短路径)
https://www.luogu.org/problem/P1027
题目描述
又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有4个飞机场,分别位于一个矩形的4个顶点上,同一个城市中2个机场之间有1条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t。
图例(从上而下)
机场
高速铁路
飞机航线
注意:图中并没有标出所有的铁路与航线。
那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教。
找出一条从城市A到B的旅游路线,出发和到达城市中的机场可以任意选取,要求总的花费最少。
输入格式
第一行有4个正整数s,t,A,B。
S(0<S≤100)表示城市的个数,tt表示飞机单位里程的价格,A,B分别为城市A,B的序号,(1≤A,B≤S)。
接下来有S行,其中第I行均有7个正整数xi1,yi1,xi2,yi2,xi3,yi3,Ti,这当中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分别是第ii个城市中任意33个机场的坐标,TiTi为第ii个城市高速铁路单位里程的价格。
输出格式
共1个数据对应测试数据。 保留一位小数。
输入输出样例
47.5
本题我们不妨把每个城市的4个机场看做四个点。那样这图就有4×s 个点。
根据题目描述,我们又知道:每一个机场都与另外每一个机场互通,差别只是在是否是同一个城市:
如果是,那么只能走高速铁路;
如果不是,那么只能走航道。用一个判断来计算这条路的花费即可。
最后跑最短路,答案为到达城市的4个机场的花费的最小值。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
const int INF=0x3f3f3f3f;
typedef long long LL;
const int mod=1e9+;
//const double PI=acos(-1);
#define Bug cout<<"---------------------"<<endl
const int maxn=1e5+;
using namespace std; int n,A,B;
double cost; struct node
{
int x, y;
int city;
}; node PT[];
node APT[maxn];
int cntt; struct Edge_node
{
int to;
int next;
double cost;
}Edge[<<]; int head[];
int cnt;
double dis[];
int ctcost[maxn]; struct cmp1
{
bool operator()(int x,int y)
{
return dis[x]>dis[y];
}
}; void add_edge(int u,int v,double val)
{
Edge[cnt].to=v;
Edge[cnt].cost=val;
Edge[cnt].next=head[u];
head[u]=cnt++;
} double juli(int x1, int y1, int x2, int y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
} void Dijkstra()
{
fill(dis+,dis++cntt,INF);
priority_queue<int,vector<int>,cmp1 > qe;
for(int i=A*-;i<=A*;i++)
{
dis[i]=;
qe.push(i);
}
while(!qe.empty())
{
int u=qe.top();
qe.pop();
for(int i=head[u];i!=-;i=Edge[i].next)
{
int v=Edge[i].to;
if(dis[u]+Edge[i].cost<dis[v])
{
dis[v]=dis[u]+Edge[i].cost;
qe.push(v);
}
}
}
} int main()
{
cnt=cntt=;
memset(head,-,sizeof(head));
scanf("%d %lf %d %d",&n,&cost,&A,&B);
for(int i=;i<=n;i++)
{
scanf("%d %d %d %d %d %d %d",&PT[].x,&PT[].y,&PT[].x,&PT[].y,&PT[].x,&PT[].y,&ctcost[i]);
while((PT[].x-PT[].x)*(PT[].x-PT[].x)!=(PT[].y-PT[].y)*(PT[].y-PT[].y))
{
node t=PT[];
PT[]=PT[];PT[]=PT[];PT[]=t;
}
PT[].x=PT[].x+(PT[].x-PT[].x);//求出最后一个点
PT[].y=PT[].y+(PT[].y-PT[].y);
for(int k=;k<;k++)
{
PT[k].city=i;
APT[++cntt]=PT[k];
}
}
for(int i=;i<=cntt;i++)//计算每两个点之间的费用
{
for(int j=i+;j<=cntt;j++)
{
double val;
if(APT[i].city==APT[j].city)
val=juli(APT[i].x,APT[i].y,APT[j].x,APT[j].y)*ctcost[APT[i].city];
else val=juli(APT[i].x,APT[i].y,APT[j].x,APT[j].y)*cost;
add_edge(i,j,val);
add_edge(j,i,val);
}
}
Dijkstra();//我竟然忘写这个了。。。
double ans=INF;
for(int i=B*-;i<=B*;i++)
{
if(ans>dis[i])
ans=dis[i];
}
printf("%.1f\n",ans);
return ;
}
蓝桥杯 Car的旅行路线 (预处理+最短路径)的更多相关文章
- Java实现 蓝桥杯VIP 算法训练 Car的旅行路线
大家可以看一下这个,蓝桥杯官网的这道题是有问题的 Car的旅行路线 算法训练 Car的旅行路线 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 查看参考代码 问题描述 又到暑假 ...
- 第四届蓝桥杯 c/c++真题
第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...
- 算法笔记_107:蓝桥杯练习 算法提高 学霸的迷宫(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要 ...
- 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
- 蓝桥杯---剪格子(DFS&BFS)(小总结)
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...
- 52-2018 蓝桥杯省赛 B 组模拟赛(一)java
最近蒜头君喜欢上了U型数字,所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增.比如 212212 就是一个U型数字,但是 333333, 9898, 567567, 313133131 ...
- 算法笔记_212:第七届蓝桥杯软件类决赛真题(Java语言B组)
目录 1 愤怒小鸟 2 反幻方 3 打靶 4 路径之谜 5 碱基 6 圆圈舞 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 愤怒小鸟 愤怒小鸟 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车 ...
- 2019第十届蓝桥杯C/C++
这是我第一次参加蓝桥杯比赛,比完后,有点低于预期,自己的发挥低于预期,赛事水准也低于预期. 教室里面很多同学的电脑出现问题,举办学校也没有完善的应急方案,有一部分同学11点钟才可以做题. 附题目pdf ...
- java算法 蓝桥杯 文化之旅
问题描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...
随机推荐
- POJ 2996:Help Me with the Game
Help Me with the Game Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64 ...
- Session简单介绍
Session 会话 , Session是基于Cookie的一种会话机制. Cookie是服务器返回一小份数据给客户端,并且存放在客户端上. Session是,数据存放在服务器端. 常用API //得 ...
- JS页面校验
结构: 1.导入正则表达式校验包:https://blog.csdn.net/weixin_44718300/article/details/88726653 2.页面校验.HTML <!DOC ...
- 菜鸟理解Lamdba表达式
简单的说就是Java 1.8后给出个简化代码的方式, Java面向对象过分强调必须通过对象的形式来完成任务,而函数思想则尽量忽略面向对象的复杂语法,强调做什么,而不是以什么形式做. 举个栗子! 首先创 ...
- java内存模型(线程,volatile关键字和sychronized关键字)
volatile关键字 用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况. ...
- consul配置
参考:https://blog.csdn.net/achenyuan/article/details/80389410 gcp: consul安装目录:/usr/local/bin/consul co ...
- Python爬虫之解析网页
常用的类库为lxml, BeautifulSoup, re(正则) 以获取豆瓣电影正在热映的电影名为例,url='https://movie.douban.com/cinema/nowplaying/ ...
- XML--XML概览
参考 https://www.cnblogs.com/fangjian0423/p/xml-namespace.html http://www.w3school.com.cn/x.asp xmlns ...
- 京东云携手Mellanox,设计最先进SDN硬件加速功能并开源
京东云携手Mellanox,设计最先进SDN硬件加速功能并开源 最新技术播报 京东云开发者社区 导语新一代 SDN.NFV 和云原生计算技术正在推动应用实例的极限,这些实例可以在虚拟化和容器化的服务 ...
- F5双机冗余配置
转自:https://blog.51cto.com/dynamic/769888本文作者:CTO_LiuJinFeng 1. 配置管理接口-IP 前面文章中没提到如何配置IP,现在开始来配置. 登录- ...