时间: 1000ms / 空间: 655360KiB / Java类名: Main

背景

冬令营入学测试

描述

这个故事是关于小F的,它有一个怎么样的故事呢。

小F是一个田径爱好者,这天它们城市里正在举办马拉松比赛,这个城市可以被看作是n个点m条带权有向边组成的图。马拉松比赛的终点只有一个:点S。

有k个人参加了这场马拉松,小F所在的城市的马拉松与正常的马拉松不一样,每个人的起点都是不相同的,具体地,第i个人从第{ai}个城市出发,并且第i个人的速度是{vi}。每个人当然是会沿着最短路跑到S点,如果一个人跑步的距离是s,速度是v,那么他所花费的时间为s/v。

现在小F想知道,谁是最快到达终点的。若有多个同时到达终点的,就求跑的路最长的,如果有多个同时到达终点且跑的路最长的,就求编号最大的。

小F想知道那个人的编号是多少。

输入格式

第一行3个数字,n,k,m,表示点的个数,跑步的人数,以及路径的条数。

接下来一行m行,每行3个数ai,bi,ci表示有一条从ai到bi长为ci的有向路径。

接下来一行一个数S。

接下来一行k个数,表示每个人的起点xi。

接下来一行k个数,表示每个人的速度vi。

输出格式

输出一个数表示答案。

测试样例1

输入

5 2 10 
5 1 9 
1 2 81 
2 3 30 
2 1 46 
1 4 45 
2 4 48 
5 1 93 
2 5 61 
2 5 21 
3 5 45 

3 5 
18 29

输出

2

备注

输入样例

3 2 3

1 2 2

1 3 3

2 3 1

3

2 1

1 3

输出样例

2

数据范围

对于30%的数据n<=5,m<=10。

对于100%的数据n<=300,m<=5000。0<=ci<=100,1<=xi,S<=n,1<=vi<=100,1<=k<=n。

最短路问题,算出每个起点到终点的最短路,然后再算时间

堆优化的dijkstra代码:

#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
using namespace std;
int n,k,m,x,y,z,s;
int start[],speed[];//start存储起点,speed存储终点
double time[];
int minn_time;//花费时间最小的人的编号
int head[];
struct node
{
int next,to,d;
}e[];
int DIS[],cnt;
void add(int u,int v,int w)//链表存储
{
cnt++;
e[cnt].to=v;
e[cnt].d=w;
e[cnt].next=head[u];
head[u]=cnt;
}
struct mon
{
int num,dis;
bool operator < (mon k)const //大根堆改成小根堆
{
return dis>k.dis;
}
};
priority_queue<mon>p;//堆优化的spfa
int main()
{
scanf("%d%d%d",&n,&k,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(y,x,z);//因为dijkstra是单源最短路径,所以从每个起点到达固定的终点,可以转化成从固定的起点到达每个终点。所以把x,y交换存储链表
}
scanf("%d",&s);
memset(DIS,,sizeof(DIS));//dijkstra初始化
p.push((mon){s,});
DIS[s]=;
while(!p.empty())//dijikstra模板
{
mon now=p.top();
p.pop();
if(DIS[now.num]!=now.dis) continue;
for(int i=head[now.num];i;i=e[i].next)
{
if(DIS[now.num]+e[i].d<DIS[e[i].to])
{
DIS[e[i].to]=DIS[now.num]+e[i].d;
p.push((mon){e[i].to,DIS[e[i].to]});
}
}
}
for(int i=;i<=k;i++) scanf("%d",&start[i]);
for(int i=;i<=k;i++)
{
scanf("%d",&speed[i]);
time[i]=(double)DIS[start[i]]/speed[i];
if(minn_time)
{
double h=time[i]-time[minn_time];//引入h防止精度误差,但本题可以不用考虑,直接用>,==,<也能过
if(h<=0.00001&&h>=)//相等
{
if(DIS[i]>=DIS[start[minn_time]])//距离更大的
minn_time=i;//因为i从小到达枚举,所以更新的i一定比minn_time小
}
else if(h<)//当前的更小
minn_time=i;
}
else minn_time=i;
}
printf("%d",minn_time);
}

floyed代码:

#include<iostream>
using namespace std;
int a[][];
int n,k,m,s;
int x,y,z;
int xi[],vi[];
double minx=;
int jl,jlk;
int main()
{
cin>>n>>k>>m;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(a[i][j]==&&i!=j) a[i][j]=;
for(int i=;i<=m;i++)
{
cin>>x>>y>>z;
a[x][y]=z;
}
for(int kk=;kk<=n;kk++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i!=j&&i!=kk&&j!=kk)
{
a[i][j]=min(a[i][j],a[i][kk]+a[kk][j]);
}
}
cin>>s;
for(int i=;i<=k;i++)
cin>>xi[i];
for(int i=;i<=k;i++)
cin>>vi[i];
for(int i=;i<=k;i++){
if(a[xi[i]][s]*1.0/vi[i]<=minx){
if(a[xi[i]][s]*1.0/vi[i]==minx){
if(a[xi[i]][s]>=a[jlk][s]){
minx=a[xi[i]][s]*1.0/vi[i];
jl=i;
jlk=xi[i];
}
}
else{
minx=a[xi[i]][s]*1.0/vi[i];
jl=i;
jlk=xi[i];
}
}
}
cout<<jl;
}

清北学堂2017NOIP冬令营入学测试P4749 F’s problem(f)的更多相关文章

  1. 清北学堂2017NOIP冬令营入学测试P4749 C’s problem(c)

    P4746 C's problem(c) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比较差 ...

  2. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

  3. 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)

    清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...

  4. 清北学堂2017NOIP冬令营入学测试P4747 D’s problem(d)

    时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题 描述 题目描述 小D是一名魔法师,它最喜欢干的事就是对批判记者了. 这次记者招待会上,记者对 ...

  5. 清北学堂2017NOIP冬令营入学测试

    P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算一次成绩.参与享优惠 描述 这是一道有背 ...

  6. AC日记——C’s problem(c) TYVJ P4746 (清北学堂2017冬令营入学测试第三题)

    P4746 C’s problem(c)   时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比 ...

  7. Tyvj2017清北冬令营入学测试

    P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算一次成绩.参与享优惠 描述 这是一道有背 ...

  8. 清北学堂入学测试P4751 H’s problem(h)

    P4751 H’s problem(h)  时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 小H是一个喜欢逛街的女孩子,但是由于上了大学 ...

  9. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

随机推荐

  1. 设计模式 之 装饰者(Decorator)模式

    装饰者模式(Decorator):动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案. 结构图: 抽象构件类(Component):给出一个抽象的接口,用 ...

  2. Mac下的快速回到桌面快捷方式

    今天突然发现一个Mac下快速回到桌面的快捷方式. command+F3 快速回到桌面. 如果想增加动画效果,快捷键是: command+shift+F3 这个功能虽然小,但是确实非常实用啊!

  3. linux 中的 tar 解压

    Type at the command prompt tar xvzf file-1.0.tar.gz - tgfo uncompress a gzip tar file (.tgz or .tar. ...

  4. TinyPNG---一个压缩PNG的神站

    如何把网页中要用到的图片压缩到最小,这是前端攻城师们在写网页时都会考虑的一个问题,今天小坊给各位带来了给前端攻城师们真正的良心网站---TinyPNG. 只需要简单的两步就可以把你要压缩的PNG格式图 ...

  5. tomcat黑/白名单设置

    vim $tomcat_home/conf/server.xml(可以单个IP或者多个ip,多个ip用|分隔,支持正则) <Context path=" reloadable=&quo ...

  6. Python标准库01 正则表达式(re包)

    python正则表达式基础 简单介绍 正则表达式并不是python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大 ...

  7. linux 中/proc 详解

    proc 文件系统 在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统.最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告 ...

  8. linux基础-第八单元 正文处理命令及tar命令

    第八单元 正文处理命令及tar命令 使用cat命令进行文件的纵向合并 两种文件的纵向合并方法 归档文件和归档技术 归档的目的 什么是归档 tar命令的功能 tar命令的常用选项 使用tar命令创建.查 ...

  9. 八、Android学习第七天——XML文件解析方法(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...

  10. https协议了解,以及相关协议的解析

    HTTPS简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版. ...