Car的旅行路线(codevs 1041)
又到暑假了,住在城市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
/*
暴力的预处理加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)的更多相关文章
- [NOIP2001提高组]CODEVS1014 Car的旅行路线(最短路)
最短路,这个不难想,但是要为它加边就有点麻烦..还好写完就过了(虽然WA了一次,因为我调试用的输出没删了..),不然实在是觉得挺难调的.. ------------------------------ ...
- xth的旅行(codevs 1450)
题目描述 Description 毕业了,Xth很高兴,因为他要和他的 rabbit 去双人旅行了.他们来到了水城威尼斯.众所周知(⊙﹏⊙b汗),这里的水路交通很发达,所以 xth 和 rabbit ...
- NOIP2001 Car的旅行路线
题四 Car的旅行路线(30分) 问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- GDOI2015小Z的旅行路线
GDOI2015小Z的旅行路线 题意: \(n\)个点的无根树,边上有权值. \(q\)个询问\(s\)和\(s\),问从\(s\)出发,找一条最长路(不经过重复点),保证路径上所有边边权不超过\(x ...
- 【Foreign】旅行路线 [倍增]
旅行路线 Time Limit: 20 Sec Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 3 2 ...
- 洛谷P1027 Car的旅行路线
洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- 洛谷 P1027 Car的旅行路线
P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路 ...
- AC日记——Car的旅行路线 洛谷 P1027
Car的旅行路线 思路: 这题不难,就是有点恶心: 而且,请认真读题目(就是题目卡死劳资): 来,上代码: #include <cmath> #include <cstdio> ...
- P1027 car的旅行路线
car的旅行路线 洛谷链接 这个题关键就是 如何把每个点表示出来,其实求出四个点的坐标后,只需要把这些点连接起来,用一遍folyed求出最短路径就好了. 代码: #include<cmath&g ...
- 洛谷 P1027 Car的旅行路线 最短路+Dijkstra算法
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1027 Car的旅行路线 题目描述 又到暑假了,住在 ...
随机推荐
- Notions of Flow Networks and Flows
这篇随笔是对算法导论(Introduction to Algorithms, 3rd. Ed.)第26章 Maximum Flow的摘录. ------------------------------ ...
- 【干货】Laravel --Validate (表单验证) 使用实例
前言 : Laravel 提供了多种方法来验证应用输入数据.默认情况下,Laravel 的控制器基类使用ValidatesRequests trait,该trait提供了便利的方法通过各种功能强大的验 ...
- ISO 基础之 (十二) 文件管理
一 文件管理 沙盒:让每个APP应用在手机上有一个独立的文件夹,相互之间不能访问. 沙盒目录:NSHomeDirectory() library: 库文件 tmp: 临时文件 1.NSData 也是一 ...
- HD 2177(威佐夫博弈 入门)
取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Nginx变量的实现机制
Nginx有两种定义变量的方式,一种是在配置文件中使用set指令(由rewrite模块提供支持),另一种是在模块内定义变量. 变量相关结构体: struct ngx_http_variable_s { ...
- html中input输入框屏蔽鼠标右键
<label> <input id="ckdestinationId" type="text" oncontextmenu="ret ...
- 删除(注意,删除后,后面顶上去,所以id会一直变,所以我们用class来定义,因为id是唯一的)
删除de $(".delete").on("click",function(){ var id = $(this).attr("value" ...
- 陷阱~EF中的Update与Insert共用一个数据上下文
事情是这样的,有一个列表,里面有很多用户信息,可能会有重复的用户,将这个列表的用户插入到数据表中,如果用户已经存在,就更新这个用户的FillTimes 字段,让它加1,使用的底层ORM是entity ...
- 【转】不得不看的两次从C++回归C的高手评论C++
不得不看的两次从C++回归C的高手评论C++ Linux之父炮轰C++:糟糕程序员的垃圾语言 Linux之父话糙理不糙 不得不看的两次从C++回归C的高手评论C++ C语言是否该扔进垃圾桶 为什么每个 ...
- CentOS创建免密码SSH(密钥)
1.输入以下命令:ssh-keygen -t rsa 2.输入命令ls:产生两个文件:id_rsa id_rsa.pub 3.复制id_rsa.pub,并命名为authorized_key cp ~/ ...