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:

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
输出样例#1:

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的旅行路线的更多相关文章

  1. 洛谷P1027 Car的旅行路线

    洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...

  2. 洛谷 P1027 Car的旅行路线

    P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路 ...

  3. 洛谷 P1027 Car的旅行路线 最短路+Dijkstra算法

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1027 Car的旅行路线 题目描述 又到暑假了,住在 ...

  4. [NOIP2001] 提高组 洛谷P1027 Car的旅行路线

    题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个 矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单 ...

  5. 洛谷1027 Car的旅行路线

    原题链接 将每个城市拆成四个点,即四个机场来看,那么这题就是求最短路. 不过建图有些麻烦,先要找出第四个机场的坐标. 设另外三个机场的坐标为\((x_1, y_1), (x_2, y_2), (x_3 ...

  6. DP【洛谷P2134】 百日旅行

    [洛谷P2134] 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场 ...

  7. AC日记——Car的旅行路线 洛谷 P1027

    Car的旅行路线 思路: 这题不难,就是有点恶心: 而且,请认真读题目(就是题目卡死劳资): 来,上代码: #include <cmath> #include <cstdio> ...

  8. P1027 car的旅行路线

    car的旅行路线 洛谷链接 这个题关键就是 如何把每个点表示出来,其实求出四个点的坐标后,只需要把这些点连接起来,用一遍folyed求出最短路径就好了. 代码: #include<cmath&g ...

  9. BZOJ1880或洛谷2149 [SDOI2009]Elaxia的路线

    BZOJ原题链接 洛谷原题链接 显然最长公共路径是最短路上的一条链. 我们可以把最短路经过的边看成有向边,那么组成的图就是一张\(DAG\),这样题目要求的即是两张\(DAG\)重合部分中的最长链. ...

随机推荐

  1. NAS是什么

    NAS是什么 简介 NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”.它是一种专用数据存储服务器. ...

  2. IT男送什么礼物给女朋友呢?

    每到各种节日,加班到吐血的IT男们,总是没什么时间准备礼物给女朋友,偶尔想起又不知道送什么的好,女朋友虽然心里不说,多少有些难过.现在推荐朋友的羊毛毡手工店,每一件都是亲手制作,特别是可以个性定制,女 ...

  3. bootstrap-treeview简单使用

    废话不多说,直接上干干货. 1.bootstrap-treeview Github网址:https://github.com/jonmiles/bootstrap-treeview 2.使用要求: & ...

  4. 超轻便的 Cache_Lite 文件缓存

    Cache_Lite提供了快速,轻便和安全的缓存系统.它针对文件容器进行了优化,并且防止缓存损坏(因为它使用文件锁定和/或散列测试). 个人感觉还是挺方便的. Cache_Lite 官方参考地址. C ...

  5. easyui_datagrid使用

    easyui的datagrid显示数据的方式(使用了jQuery) 第一步 创建显示的格式,方法有两种: 第一种:在HTML标签中创建,类似如下的形式,参数可以在标签中设置,也可以在脚本中 这种方式在 ...

  6. Incermental GC

    目录 增量式垃圾回收 什么是增量式垃圾回收 三色标记算法 GC 标记清除算法的分割 根查找阶段 标记阶段 写入屏障 清除阶段 分配 优点和缺点 缩短最大暂停时间 降低了吞吐量 Steele 的算法 m ...

  7. Django初学习程序大致流程

  8. PKU 2288 Islands and Bridges 状态dp

    题意: 给你一张地图,上面有一些岛和桥.你要求出最大的三角哈密顿路径,以及他们的数量. 哈密顿路:一条经过所有岛的路径,每个岛只经过一次. 最大三角哈密顿路:满足价值最大的哈密顿路. 价值计算分为以下 ...

  9. 题解 CF1027D 【Mouse Hunt】

    这道题原本写了一个很复杂的DFS,然后陷入绝望的调试. 看了一下题解发现自己完全想复杂了. 这里大概就是补充一些题解没有详细解释的代码吧... (小声BB)现在最优解rank4(话说$O2$负优化什么 ...

  10. 第6章8节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览-小结

    本章我们重点环绕处理网络过来的命令的MonkeySourceNetwork这个事件源来阐述学习Monkey是怎样处理MonkeyRunner过来的命令的.以下总结下MonkeyRunner从启动Mon ...