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的旅行路线 题目描述 又到暑假了,住在 ...
随机推荐
- Linux Kernel Synchronization && Mutual Exclusion、Linux Kernel Lock Mechanism Summarize
目录 . 内核锁机制 . 同步与互斥 . 锁定内存总线原子操作 . 信号量 . 自旋锁 . RCU机制 . PERCPU变量 . 内存和优化屏障 . 读者/写者锁 . 大内核锁 . 互斥量 1. 内核 ...
- TCP/IP详解 学习六
从ip层看路由表 选路策略 选路策略:决定把哪些路由放到路由表的规则. Ip执行选路机制,而路由守护程序则提供选路策略. Netstat –rn 打印路由表,如果没有-n命令会搜索配置文件,将网络地 ...
- File类的创建,删除文件
File.Create(@"C:\Users\shuai\Desktop\new.txt"); Console.WriteLine("创建成功"); Conso ...
- xml转成数组,原来这么简单!
function xml2arr($xml){ $obj = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); $js ...
- 牛顿迭代法求n方根
一.简单推导 二.使用 借助上述公式,理论上可以求任意次方根,假设要求a(假设非负)的n次方根,则有xn=a,令f(x)=xn-a,则只需求f(x)=0时x的值即可.由上述简单推导知,当f(x)=0时 ...
- JS小记
好记性不如烂笔头. 1.document.ElementFromPoint:根据坐标获得元素 2.有时候要操作DOM页面,但是得不到预期结果,很可能是因为页面还没加载完成,在console控制台可以看 ...
- Log4j 2使用教程
Log4j 2的好处就不和大家说了,如果你搜了2,说明你对他已经有一定的了解,并且想用它,所以这里直接就上手了. 1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以 ...
- 标准库errno.h 查看错误代码编号,errno:4 与error:2
log 里报错,errno:4 与errno:2 查了一下 errno.h --------下文来自百度百科 errno 编辑 errno 是记录系统的最后一次错误代码.代码是一个int型的值 ...
- [转载]如何在Ubuntu上安装LAMP服务器系统
[2013年7月25日 51CTO外电头条]为何应该在Ubuntu上安装LAMP服务器?从事Web开发工作时,我更偏爱在不受干扰的情况下,在我那台计算机上的开发环境下进行开发.我宁愿所犯的错误大部分是 ...
- jQuery1.11源码分析(5)-----Sizzle编译和过滤阶段[原创]
在上一章中,我们说到在之前的查找阶段我们已经获得了待选集seed,那么这一章我们就来讲如何将seed待选集过滤,以获得我们最终要用的元素. 其实思路本质上还是不停地根据token过滤,但compile ...