哇这些真题终于正经起来奥

刚看这道题很不自信觉得自己肯定不能建图成功甚至想过用贪心。。

后来一想发现建图还是蛮容易的,AI我是真的蠢

话说一本通真的很坑啊,把原题的保留1位改成了2

我把在洛谷AC的代码交上去查了好久才发现。。

(话说为什么把读入优化换成scanf效率快了一千倍。。)

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,s,t,A,B,T[maxn<<];
double dis[maxn<<];
bool book[maxn<<];
/*inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') if(ch=='-') f=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}*/
struct data{
int city;
int x,y;
}a[maxn<<];
inline int power_2(int x)
{
return x*x;
}
void getlast(int x1,int y1,int x2,int y2,int x3,int y3,int i)
{
int x4,y4;
int dis1=power_2(x1-x2)+power_2(y1-y2),
dis2=power_2(x1-x3)+power_2(y1-y3),
dis3=power_2(x2-x3)+power_2(y2-y3);
if(dis2==dis1+dis3) x4=x3-x2+x1,y4=y3+y1-y2;
if(dis1==dis2+dis3) x4=x2-x3+x1,y4=y2+y1-y3;
if(dis3==dis1+dis2) x4=x3-x1+x2,y4=y3+y2-y1;
a[i+].x=x4;a[i+].y=y4;
}//这道题目唯一需要注意的点大概就是这个求第四个点
inline double distance(int x1,int y1,int x2,int y2)
{
return sqrt(power_2(x1-x2)+power_2(y1-y2));
}
void SPFA()
{
memset(book,,sizeof(book));
queue <int> q;
for(int i=;i<=s<<;i++) dis[i]=;
for(int i=A*-;i<=A*;i++) dis[i]=,q.push(i),book[i]=;
while(!q.empty())
{
int u=q.front();q.pop();book[u]=;
for(int i=;i<=s<<;i++)
{
if(i==u) continue;
double cost=distance(a[i].x,a[i].y,a[u].x,a[u].y);
if(a[i].city==a[u].city) cost*=T[a[i].city];
else cost*=t;
if(dis[i]>dis[u]+cost)
{
dis[i]=dis[u]+cost;
if(!book[i])
{
book[i]=;
q.push(i);
}
}
}
}
}
void init()
{
//memset(t,0,sizeof(t));
memset(a,,sizeof(a));
scanf("%d%d%d%d",&s,&t,&A,&B);
int i;
for(i=;i<=s<<;i+=)
{
//int x1,x2,x3,y1,y2,y3;
scanf("%d%d%d%d%d%d%d",&a[i].x,&a[i].y,&a[i+].x,&a[i+].y,&a[i+].x,&a[i+].y,&T[i/+]);
a[i].city=a[i+].city=a[i+].city=a[i+].city=i/+;
getlast(a[i].x,a[i].y,a[i+].x,a[i+].y,a[i+].x,a[i+].y,i);
}
}
int main()
{
scanf("%d",&n);
int i;
for(i=;i<=n;i++)
{
init();
SPFA();
double ans=dis[B<<];
for(int j=B*-;j<B*;j++) if(ans>dis[j]) ans=dis[j];
printf("%.2lf\n",ans);
}
return ;
}

1827:【01NOIP提高组】Car的旅行路线的更多相关文章

  1. 【noip 2012】提高组Day1T3.开车旅行

    Description 小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市i 的海拔高度为Hi,城市i 和城市 ...

  2. NOIP2012提高组D1T3 开车旅行

    n<=100000个山,每个山有高度,从一个山到另一个山代价为高度差,有A和B两人一起开车,A每次选前进方向的次近山,B选最近,保证山高度不同且如果代价相同的山低的代价算小,每次旅行先A走,然后 ...

  3. 【NOIP2012提高组】开车旅行 倍增

    题目分析 朴素的做法就是预处理下一个目的地,然后跑模拟,超时. 本题最重要的考点是倍增优化.设$fa[i][j]$表示a从i出发行驶$2^j$“次”后行驶的路程,$fb[i][j]$表示从i出发行驶$ ...

  4. 1825:【01NOIP提高组】数的划分

    #include<bits/stdc++.h> using namespace std; ],tot; void dfs(int num,int pos) { if(pos==k) ]) ...

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

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

  6. [NOIP2012] 提高组 洛谷P1081 开车旅行

    题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...

  7. 开车旅行 2012年NOIP全国联赛提高组(倍增+set)

    开车旅行 2012年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 小A 和小B决定利用 ...

  8. [NOIp2018提高组]旅行

    [NOIp2018提高组]旅行: 题目大意: 一个\(n(n\le5000)\)个点,\(m(m\le n)\)条边的连通图.可以从任意一个点出发,前往任意一个相邻的未访问的结点,或沿着第一次来这个点 ...

  9. 【NOIP2015模拟11.5】JZOJ8月5日提高组T3 旅行

    [NOIP2015模拟11.5]JZOJ8月5日提高组T3 旅行 题目 若不存在第\(k\)短路径时,输出"Stupid Mike" 题解 题意 给出一个有\(n\)个点的树 问这 ...

随机推荐

  1. 天然气水电行业专用抄表器PDA现场打印通知单

    传统的抄表工作是使用卡片记录,抄表工人不仅需要背着厚厚的卡片进行记录,回到电力局还需要有专门人员进行电脑录入,浪费了大量人力物力,而且各个环节上出错率比较高.电力专用抄表器的广泛应用使得电力抄表工作变 ...

  2. [LeetCode] 137. 只出现一次的数字,其余三次 II ☆☆☆

    描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输 ...

  3. Docker基础理论整理(精简)

    目录 一.什么是docker,docker的概念 二.docker中的镜像 三.docker中的容器 四.docker中的仓库 五.docker的网络通信 bridge模式 host模式 contai ...

  4. 第四篇:python基础之杂货铺

    在这一篇中我们将对上几篇的Python零碎的知识进行补充,即字符串的格式化输出,以及深浅拷贝,接下来我们将对这两种进行一一介绍. 一.字符串格式化输出 关于字符串的格式化输出,我们需要了解为什么需要字 ...

  5. c# 使用序列化

  6. vue框架之脚手架(vue-cli)的使用

    前期准备 1.在使用之前需要安装node.js,https://nodejs.org/dist/latest-v8.x/ 2.下载之后在cmd中测试 node -v npm -v 如图上即可 3.下载 ...

  7. Gitlab CI/CD任务一直处于pending

    在注册Runner时候这里输入了tag,这里指的是runner的标签,可以设置多个  ,分别用 ,号分割 .gitlab-ci.yml文件中 stages: - pull - package - bu ...

  8. shell中判断前一个命令是否执行成功

    ]; then echo "fail" else echo "success" fi 或者 ]; then echo "success" e ...

  9. 切换Python环境 linux终端命令行

    切换Python环境 conda info -e // 查看有什么环境 source activate env //切换环境 linux终端分屏 terminator  https://www.jia ...

  10. Caused by: java.lang.ClassNotFoundException: org.fusesource.jansi.WindowsAnsiOutputStream

    08:23:18,995 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate append ...