题目描述

又到暑假了,住在城市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

思路

给定三个点坐标,根据初中知识即可求出矩阵另外的一个点坐标,建图,跑Floyed即可
 #include<cmath>
 #include<cstdio>
 #include<iostream>
 #include<cstring>
 using namespace std;
 ],y[];
 ];
 int n,s,tt,a,b;
 ][];
 void doit(int t1,int t2){
     d[t1][t2]=sqrt((x[t1]-x[t2])*(x[t1]-x[t2])
                     +(y[t1]-y[t2])*(y[t1]-y[t2]));
     )/)==((t2-)/)){
         d[t1][t2]=d[t1][t2]*ti[(t1-)/+];
     }
     else d[t1][t2]=d[t1][t2]*tt;
     d[t2][t1]=d[t1][t2];
     return;
 }
 int find(int t1,int t2,int t3){ //找直角三角形斜边
     if((d[t1][t2]>d[t2][t3])&&(d[t1][t2]>d[t3][t1]))
       return t3;
     if((d[t2][t3]>d[t1][t2])&&(d[t2][t3]>d[t3][t1]))
       return t1;
     if((d[t3][t1]>d[t2][t3])&&(d[t3][t1]>d[t1][t2]))
       return t2;
 }
 void doit2(int t1,int t2,int t3){ //求第四个点的坐标(数学方法)
     doit(t1,t2);doit(t2,t3);doit(t3,t1);
     int haha=find(t1,t2,t3);
     if(haha==t1){
         x[t3+]=x[t3]+x[t2]-x[t1];
         y[t3+]=y[t3]+y[t2]-y[t1];
     }
     if(haha==t2){
         x[t3+]=x[t3]+x[t1]-x[t2];
         y[t3+]=y[t3]+y[t1]-y[t2];
     }
     if(haha==t3){
         x[t3+]=x[t1]+x[t2]-x[t3];
         y[t3+]=y[t1]+y[t2]-y[t3];
     }
 }
 int main() {
     /*
         模版转自:http://www.cnblogs.com/suishiguang/p/6413560.html
     */
     scanf("%d",&n);
     ;zkz<=n;zkz++){
         scanf("%d%d%d%d",&s,&tt,&a,&b);
         //S城市数,tt飞机单价,a,b起点 终点
         ;i<=;i++)
             ;j<=;j++)
                 d[i][j]=;
         ;i<=s;i++){
             scanf("%d%d%d%d%d%d%d",
                   &x[*i-],&y[*i-],&x[*i-],
                   &y[*i-],&x[*i-],&y[*i-],
                   &ti[i]);
             doit2(*i-,*i-,*i-);
         }
         ;i<=*s;i++)
           ;j<=*s;j++)
             doit(i,j);// 建图
         ;k<=*s;k++)
           ;i<=*s;i++)
             ;j<=*s;j++)
               d[i][j]=min(d[i][k]+d[k][j],d[i][j]);
         double ans=200000000.0;
         *a-;i<=*a;i++)
             *b-;j<=*b;j++)
                 ans=min(d[i][j],ans);
         printf("%.1lf\n",ans);
     }
     ;
 }
 /*思路:给出三个点 数学方法 求出第四个点
 城市内部 用 高铁的费用乘以 单价 建图
 两个机场之间 用 飞机票钱*路程 建图
 Floyd 暴力 求解两个点之间的最短距离
 以为题目说 从A城市的哪个机场走到B城市的
 哪个机场并不限定
 所以只要 从A、B两个城市当中 选出 两个
 花费最小的机场即可 */    

[最短路][部分转]P1027 Car的旅行路线的更多相关文章

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

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

  2. 洛谷 P1027 Car的旅行路线

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

  3. 洛谷P1027 Car的旅行路线

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

  4. P1027 car的旅行路线

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

  5. luogu P1027 Car的旅行路线

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

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

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

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

    https://www.luogu.org/problem/show?pid=1027#sub 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于 ...

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

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

  9. Car的旅行路线 luogu P1027 (Floyd玄学Bug有点毒瘤)

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

随机推荐

  1. java基础---字符串string

    1.字符创的概念 java字符串就是Unicode字符序列.例如,串“Java\u2122”由5个Unicode字符J.a.v.a和TM.java没有内置的字符串类型,而是在标准库Java类库中提供了 ...

  2. jdk8 JAVA_OPTS

    JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -Djava. ...

  3. Gridview 动态添加行

    /// <summary> /// 首次加载绑定 /// </summary> private void DataLoad()         { list.Add(new P ...

  4. ajax 轮询 和 php长连接

     只看加粗的字体 js   部分       1:  ajax 成功回调函数中 一定要用时间函数间隔调用  get_comment(). get_comments('init'); function ...

  5. LeetCode 605. Can Place Flowers (可以种花)

    Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, ...

  6. 我只是想获取access_token而已

    起因是想在微信小程序中获取access_token. 之前资源只有一个阿里云虚拟主机和一个域名,于是用C#后端写了GET请求的接口,准备调用自己域名下的接口获取access_token 使用微信的wx ...

  7. 数据分析基础之Linalg的使用

    Linear algebra 简介 When SciPy is built using the optimized ATLAS LAPACK and BLAS libraries, it has ve ...

  8. Strange fuction

    Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  9. 一个基于EntityFramework Core的简单数据库访问层,适用于轻量级数据库业务

    这个访问层的代码实际上是园子里某个前辈的,本人只是觉得好使,记录了下来. 本访问层需要通过Nuget安装EntityFramework Core,不过个人认为EF 6同样可以使用. 搭配数据库,最好是 ...

  10. Node.js EventEmitter

    Node.js EventEmitter Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有 ...