洛谷——P1027 Car的旅行路线
https://www.luogu.org/problem/show?pid=1027#sub
题目描述
又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t。

图例(从上而下)
机场 高速铁路
飞机航线
注意:图中并没有
标出所有的铁路与航线。
那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教。
找出一条从城市A到B的旅游路线,出发和到达城市中的机场可以任意选取,要求总的花费最少。
输入输出格式
输入格式:
第一行为一个正整数n(0<=n<=10),表示有n组测试数据。
每组的第一行有四个正整数s,t,A,B。
S(0<S<=100)表示城市的个数,t表示飞机单位里程的价格,A,B分别为城市A,B的序号,(1<=A,B<=S)。
接下来有S行,其中第I行均有7个正整数xi1,yi1,xi2,yi2,xi3,yi3,Ti,这当中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分别是第I个城市中任意三个机场的坐标,T I为第I个城市高速铁路单位里程的价格。
输出格式:
共有n行,每行一个数据对应测试数据。 保留一位小数
输入输出样例
1
3 10 1 3
1 1 1 3 3 1 30
2 5 7 4 5 2 1
8 6 8 8 11 6 3
47.5 恶心——————————太恶心了
首先用几何算出第四个点
用dis[0][A] A的四个点作为起点,dis[0][B]的四个点做终点
剩下的就是Floyd O(∩_∩)O~
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath> #define y1 mmp using namespace std; const int M();
const int N(<<);
const double INF(1e15); int n,city_num,A,B;
double dis[N][N],ans;
int air_cost,road_cost[N];
int x1,x2,x3,x4,y1,y2,y3,y4,d1,d2,d3; struct Node
{
int x,y;
Node(int x=,int y=): x(x),y(y) {}
}airport[M]; int Get_dis(int a,int aa,int b,int bb)
{
return (a-b)*(a-b)+(aa-bb)*(aa-bb);
} void init()
{
memset(dis,,sizeof(dis));
memset(airport,,sizeof(airport));
memset(road_cost,,sizeof(road_cost));
} int main()
{
scanf("%d",&n);
for(;n;n--)
{
init();
scanf("%d%d%d%d",&city_num,&air_cost,&A,&B);
for(int i=;i<=city_num;i++)
{
scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3);
scanf("%d",road_cost+i);
d1=Get_dis(x1,y1,x2,y2);
d2=Get_dis(x2,y2,x3,y3);
d3=Get_dis(x3,y3,x1,y1);
if(d1>d2&&d1>d3)
{
x4=x1+x2-x3;
y4=y1+y2-y3;
}
else if(d2>d1&&d2>d3)
{
x4=x2+x3-x1;
y4=y2+y3-y1;
}
else if(d3>d1&&d3>d2)
{
x4=x3+x1-x2;
y4=y3+y1-y2;
}
airport[(i<<)-]=Node(x1,y1);
airport[(i<<)-]=Node(x2,y2);
airport[(i<<)-]=Node(x3,y3);
airport[(i<<)-]=Node(x4,y4);
}
for(int i=;i<=(city_num<<);i++)
for(int j=;j<=(city_num<<);j++)
if(i!=j) dis[i][j]=INF;
for(int i=;i<=(city_num<<);i++)
for(int j=;j<=(city_num<<);j++)
{
double dist=sqrt(Get_dis(airport[i].x,airport[i].y,airport[j].x,airport[j].y));
if(i+>>==j+>>)
dis[i][j]=dist*(road_cost[i+>>]);
else
dis[i][j]=dist*air_cost;
}
dis[][(A<<)-]=;
dis[][(A<<)-]=;
dis[][(A<<)-]=;
dis[][(A<<)-]=;
for(int k=;k<=(city_num<<);k++)
for(int i=;i<=(city_num<<);i++)
for(int j=;j<=(city_num<<);j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
ans=min(min(dis[][(B<<)-],dis[][(B<<)-]),min(dis[][(B<<)-],dis[][B<<]));
printf("%.1lf\n",ans);
}
return ;
}
洛谷——P1027 Car的旅行路线的更多相关文章
- 洛谷P1027 Car的旅行路线
洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- 洛谷 P1027 Car的旅行路线
P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路 ...
- 洛谷 P1027 Car的旅行路线 最短路+Dijkstra算法
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1027 Car的旅行路线 题目描述 又到暑假了,住在 ...
- [NOIP2001] 提高组 洛谷P1027 Car的旅行路线
题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个 矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单 ...
- 洛谷1027 Car的旅行路线
原题链接 将每个城市拆成四个点,即四个机场来看,那么这题就是求最短路. 不过建图有些麻烦,先要找出第四个机场的坐标. 设另外三个机场的坐标为\((x_1, y_1), (x_2, y_2), (x_3 ...
- DP【洛谷P2134】 百日旅行
[洛谷P2134] 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场 ...
- AC日记——Car的旅行路线 洛谷 P1027
Car的旅行路线 思路: 这题不难,就是有点恶心: 而且,请认真读题目(就是题目卡死劳资): 来,上代码: #include <cmath> #include <cstdio> ...
- P1027 car的旅行路线
car的旅行路线 洛谷链接 这个题关键就是 如何把每个点表示出来,其实求出四个点的坐标后,只需要把这些点连接起来,用一遍folyed求出最短路径就好了. 代码: #include<cmath&g ...
- BZOJ1880或洛谷2149 [SDOI2009]Elaxia的路线
BZOJ原题链接 洛谷原题链接 显然最长公共路径是最短路上的一条链. 我们可以把最短路经过的边看成有向边,那么组成的图就是一张\(DAG\),这样题目要求的即是两张\(DAG\)重合部分中的最长链. ...
随机推荐
- Session、Cookie总结
什么是sessnion,session存在哪,能存多久.怎么设置他的存储时间 一.什么是session 1.session 被翻译为会话.当client(一般都是浏览器作为client)訪问serve ...
- 【Android应用开发技术:基础构建】命令行下的Android应用开发
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.co ...
- Android开发之EditText 详解(addTextChangedListener监听用户输入状态)
为了实现像qq或者微信输入框的效果,当在 EditText输入字符串时发送按钮显示,当输入框字符消除掉时按钮改变.所以这时候我就要用到addTextChangedListener 用它来监听用户输入状 ...
- EL表达式获取参数值${param.name}等
转自:http://www.html580.com/study/83.html EL表达式获取参数值${param.name}等 (1).${pageContext} 获取到 pageContext ...
- Pycharm在创建py文件时,如何自动添加默认文件头注释?
PyCharm是一款很好用的编写Python工程的IDE,用PyCharm创建一个Python文件或者向工程添加一个.py文件时,为了更好的使所编写的代码在各操作环境更好的运行,我们往往需要在.py文 ...
- kotlin官方文档-1.0入门
什么是Kotlin? 图片发自简书App Kotlin是JetBrains开发的基于JVM的语言,JetBrains想必大家应该很熟悉了,他们创造了很多强大的IDE,android studio谷 ...
- 【基础篇】Android中获取Drawable的方法
public static Drawable getDrawable(Context context,String filename) { BitmapDrawable drawable=null; ...
- CheckException和RuntimeException
java文档中对RuntimeException的定义是: RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类. 可能在执行方法期间抛出但未被捕获的 Runt ...
- Linux环境下源码安装PostgreSQL
1.下载PostgreSQL源码包,并保存到Linux操作系统的一个目录下 2.解压PostgreSQL源码包 :tar zxvf postgresql-9.2.4.tar.gz 或 tar jxvf ...
- 空宏-标C中空宏的妙用
空宏的作用: 1)编译指示: 2)方便阅读: 定义宏,并在预处理过程中将其替换为空字符串(即删除) 偶然的机会,看到了下面的C代码:ISC_PLATFORM_NORETURN_PRE static v ...