题目描述 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

/*
暴力的预处理加Floyed求最短路
预处理:
将n个城市拓展为4*n个飞机场,
belong[i]表示第i个飞机场属于哪个城市
map[][]储存飞机场间的距离,用于Floyed更新
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#define M 410
#define INF 9999999
using namespace std;
double x[M],y[M],map[M][M],t;
int belong[M],n,A,B,tot=;
void get_four(int i,int zh)
{
int r1=tot-,r2=tot-,r3=tot,rr;
map[r1][r2]=map[r2][r1]=pow(x[r1]-x[r2],)+pow(y[r1]-y[r2],);
map[r1][r3]=map[r3][r1]=pow(x[r1]-x[r3],)+pow(y[r1]-y[r3],);
map[r3][r2]=map[r2][r3]=pow(x[r3]-x[r2],)+pow(y[r3]-y[r2],);
if(map[r1][r2]+map[r1][r3]==map[r2][r3])rr=r1;
else if(map[r1][r2]+map[r2][r3]==map[r1][r3])rr=r2;
else rr=r3;
tot++;
if(rr==r1){double xx=x[r1]-x[r2],yy=y[r1]-y[r2];x[tot]=x[r3]-xx;y[tot]=y[r3]-yy;}
if(rr==r2){double xx=x[r1]-x[r2],yy=y[r1]-y[r2];x[tot]=x[r3]+xx;y[tot]=y[r3]+yy;}
if(rr==r3){double xx=x[r1]-x[r3],yy=y[r1]-y[r3];x[tot]=x[r2]+xx;y[tot]=y[r2]+yy;}
for(int j=tot-;j<=tot;j++)
for(int k=tot-;k<j;k++)
map[j][k]=map[k][j]=sqrt(pow(x[j]-x[k],)+pow(y[j]-y[k],))*zh;
belong[tot]=i;
}
void floyed()
{
for(int k=;k<=tot;k++)
for(int i=;i<=tot;i++)
for(int j=;j<=tot;j++)
if(i!=j&&i!=k&&j!=k)
map[i][j]=min(map[i][k]+map[k][j],map[i][j]);
double ans=INF;
for(int i=;i<=tot;i++)
for(int j=;j<=tot;j++)
if(belong[i]==A&&belong[j]==B)
ans=min(map[i][j],ans);
printf("%.1lf\n",ans);
}
void work()
{
scanf("%d%lf%d%d",&n,&t,&A,&B);
for(int i=;i<=n;i++)
{
for(int j=;j<=;j++)
{
tot++;
scanf("%lf%lf",&x[tot],&y[tot]);
belong[tot]=i;
}
int x;
scanf("%d",&x);
get_four(i,x);
}
for(int i=;i<=tot;i++)
for(int j=;j<i;j++)
if(belong[i]!=belong[j])
map[i][j]=map[j][i]=sqrt(pow(x[i]-x[j],)+pow(y[i]-y[j],))*t;
floyed();
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(map,,sizeof(map));
memset(x,,sizeof(x));
memset(y,,sizeof(y));
memset(belong,,sizeof(belong));
work();
}
return ;
}

Car的旅行路线(codevs 1041)的更多相关文章

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

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

  2. xth的旅行(codevs 1450)

    题目描述 Description 毕业了,Xth很高兴,因为他要和他的 rabbit 去双人旅行了.他们来到了水城威尼斯.众所周知(⊙﹏⊙b汗),这里的水路交通很发达,所以 xth 和 rabbit ...

  3. NOIP2001 Car的旅行路线

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

  4. GDOI2015小Z的旅行路线

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

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

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

  6. 洛谷P1027 Car的旅行路线

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

  7. 洛谷 P1027 Car的旅行路线

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

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

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

  9. P1027 car的旅行路线

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

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

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

随机推荐

  1. HDU 1060 Left-most Digit

    传送门 Leftmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. Bookmarklet

    学习 http://www.ruanyifeng.com/blog/2011/06/a_guide_for_writing_bookmarklet.html

  3. DedeCMS 5.7 后门漏洞

    简要描述: DedeCMS V5.7 SP1正式版 UTF-8 GBK版本疑似被植入一句话后门 前几日下载并不存在此代码 详细说明: shopcar.class.php被植入一句话@eval(file ...

  4. udf提权方法和出现问题汇总

    一.适用条件 1.目标系统是Windows(Win2000,XP,Win2003): 2.你已经拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数( ...

  5. innerText在谷歌、火狐浏览器下的使用

    使用innerHTML.replace(/<.+?>/gim,'')代替innerText,简单正则替换一下

  6. Nginx HA 及https配置部署

    Nginx HA 整体方案架构为: (内网192.168.199.5) +-----------VIP----------+ | | | | Master Backup 192.168.199.90 ...

  7. javascript常用排序算法总结

    算法是程序的灵魂.虽然在前端的开发环境中排序算法不是很经常用到,但常见的排序算法还是应该要掌握的.我在这里从网上整理了一下常见排序算法的javascript实现,方便以后查阅. 归并排序: 1 fun ...

  8. POJ 3537 Crosses and Crosses

    Crosses and Crosses Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2237 Accepted: 821 Ca ...

  9. acdream.Bet(数学推导)

    Bet Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit Status Pra ...

  10. hdu 5183. Negative and Positive (哈希表)

    Negative and Positive (NP) Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...