题目描述 Description

又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t。

那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教。
任务
找出一条从城市A到B的旅游路线,出发和到达城市中的机场可以任意选取,要求总的花费最少。

输入描述 Input Description

第一行为一个正整数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个城市高速铁路单位里程的价格。

输出描述 Output Description

共有n行,每行一个数据对应测试数据。

样例输入 Sample Input

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

样例输出 Sample Output

47.5

数据范围及提示 Data Size & Hint

如描述

思路分析:求出第四个点,一开始感觉什么高大上呢,其实就是勾股定理,三种情况,稍微注意下存边,再加上最短路就好,做了半天,当在同一城市时火车的价钱打成了机场的,卡了好久MD,加强静态查错能力。。

PS:基本上是看了(http://wenku.baidu.com/link?url=n3hmdiEGTq9j-cBOP7ZUC7t6Ea8FwG6vbrFDTeKhe5hi_x3flKpzelERXByhlQ2gbj7kzJXyZBwSkgAPIxISrkDzIp5bEl0oI9aP5tWbc-a),讲得很好。

Source:

 #include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int n,vf,start,end,s;
int map[][],vn[];
bool used[];
double ans[];
double dist(int x1,int y1,int x2,int y2)
{
return (sqrt(pow((x1-x2),)+pow((y1-y2),)));
}
void dijistra()//dijistra求最短路 。
{
int i,j,now,apt;
double minn,u;
memset(used,,sizeof(used));
memset(ans,,sizeof(ans));
minn=;
used[start*]=true;
used[start*-]=true;
used[start*-]=true;
used[start*-]=true;
while (==)
{
minn=;
for (i=;i<=*n;i++)//枚举被经过的机场,对其余未被经过的机场进行dijstra。
{
if (used[i])
{
now=(i-)/+;
for (j=;j<=*now-;j++)// 若未被经过的机场dis值最小的在当前最短路的机场所在城市"前面",枚举所在城市的前面的机场。
{
if (!used[j])
{
u=ans[i]+dist(map[i][],map[i][],map[j][],map[j][])*vf;
if (u<minn)
{
minn=u;
apt=j;//记录机场位置
}
}
} for (j=*now-;j<=*now;j++)//若未被经过的机场dis值最小的和当前最短路的机场处于同一个城市,换交通方式。
{
if (!used[j])
{
u=ans[i]+dist(map[i][],map[i][],map[j][],map[j][])*vn[now];
if (u<minn)
{
minn=u;
apt=j;
}
}
}
for (j=*now+;j<=*n;j++)//同第一种情况。
{
if (!used[j])
{
u=ans[i]+dist(map[i][],map[i][],map[j][],map[j][])*vf;
if (u<minn)
{
minn=u;
apt=j;
}
}
} }
}
if ((apt==*end-) || (apt==*end-) || (apt==*end-) || (apt==*end))
{
printf("%.1lf\n",minn);
return;
}
else
{
used[apt]=true; ans[apt]=minn;
}
// }
}
}
void rf()//读入+根据平面内三点,求出第四个点的坐标。
{
int i;
int x,x1,x2,x3,y1,y2,y3,y;
scanf("%d%d%d%d",&n,&vf,&start,&end);
if (start==end)
{
printf("%.1lf",0.0);
return;
}
else
for (i=;i<=n;i++)
{
scanf("%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&vn[i]);
x=x1+x2-x3; y=y1+y2-y3;
if (dist(x1,y1,x2,y2)!=dist(x3,y3,x,y))
{
x=x1+x3-x2;
y=y1+y3-y2;
if (dist(x1,y1,x3,y3)!=dist(x2,y2,x,y))
{
x=x2+x3-x1;
y=y2+y3-y1;
}
}
map[i*-][]=x1; map[i*-][]=y1;
map[i*-][]=x2; map[i*-][]=y2;
map[i*-][]=x3; map[i*-][]=y3;
map[i*][]=x; map[i*][]=y;
}
dijistra();
} int main()
{
int i;
scanf("%d",&s);
for (i=;i<=s;i++)
{
memset(map,,sizeof(map));
//memset(ans,0,sizeof(ans));
rf();
}
return ;
}

【CodeVS】P1041 car的旅行路线的更多相关文章

  1. NOIP2001 Car的旅行路线

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

  2. [NOIP2001提高组]CODEVS1014 Car的旅行路线(最短路)

    最短路,这个不难想,但是要为它加边就有点麻烦..还好写完就过了(虽然WA了一次,因为我调试用的输出没删了..),不然实在是觉得挺难调的.. ------------------------------ ...

  3. GDOI2015小Z的旅行路线

    GDOI2015小Z的旅行路线 题意: \(n\)个点的无根树,边上有权值. \(q\)个询问\(s\)和\(s\),问从\(s\)出发,找一条最长路(不经过重复点),保证路径上所有边边权不超过\(x ...

  4. 【Foreign】旅行路线 [倍增]

    旅行路线 Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 3 2 ...

  5. 洛谷P1027 Car的旅行路线

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

  6. 洛谷 P1027 Car的旅行路线

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

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

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

  8. codevs 1450 xth 的旅行

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 毕业了,Xth很高兴,因为他要和他的 ra ...

  9. P1027 car的旅行路线

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

随机推荐

  1. 【翻译十五】-java并发之固定对象与实例

    Immutable Objects An object is considered immutable if its state cannot change after it is construct ...

  2. 【翻译六】java-连接和实例

    Joins The join method allows one thread to wait for the completion of another. If t is a Thread obje ...

  3. CXF学习 (1)

    Axis(Apache) -> Axis2(Apache) XFire - > CXF (XFire+Celtrix) (Apache) CXF并不仅仅是Webservice框架,更号称是 ...

  4. [译] Extending jQuery Part1 Simple extensions

    本章包含: JQuery 的起源和目标. 你能扩展JQuery 的那些部分. JQuery 扩展的实例. 如今,JQuery 已经是网络上最受欢迎的JavaScript Library. 1.1 jQ ...

  5. jQuery Mobile Datepicker 使用

    插件引入文件: <meta name="viewport" content="width=device-width, initial-scale=1"&g ...

  6. 制作U盘启动系统盘

    下载ULtraISO,安装之后,先打开一个iso系统文件,然后选中菜单“启动”下的“写入硬盘映像”

  7. 在Salesforce中添加Workflow Rule

    在Salesforce中可以添加Workflow Rule来执行特定的动作,比如说:当Object的某个字段发生变化时,根据变化的值去修改其他field,和Trigger的功能很类似,不过Trigge ...

  8. WINDOWS页式内存管理解析

    jpg 改 rar

  9. Linux学习笔记(15)shell基础之Bash基本功能

    1 shell概述 shell是一个命令解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序.用户可以用shell启动.挂起.停止甚至是编写一些程序. shell是一个功能强大 ...

  10. android中随着ScrollView的滑动,titleBar状态的改变

    今天项目有一个需求,,类是于QQ空间里面的一个功能,于是就研究了一下,嗯,说这么多,可能还有人不知道指的是那个,直接上效果图.见谅,不会弄动态图:   对,就是这种效果,我研究了一下,思路如下: 1. ...