时间: 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. 如何删除或重置spfile中的参数

    在ORACLE中,修改spfile中的参数一般非常容易,那么如何删除spfile中的参数呢? 下面我们用一个案例来介绍一下,如何删除spfile中的参数,一种方法就是创建对应的pfile,删除对应的参 ...

  2. ADO.Net(一)——增、删、改、查

    数据访问 对应命名空间:System.Data.SqlClient; SqlConnection:连接对象 SqlCommand:命令对象 SqlDataReader:读取器对象 CommandTex ...

  3. IP地址(IPv4)/IPv6地址的正则表达式

    原地址:http://pfeishao.blog.163.com/blog/static/18162337020112113130453/ Pv4地址正则表达式:^((25[0-5]|2[0-4]\d ...

  4. 烂泥:php5.6源码安装与apache集成

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. apache对php的支持是通过apache的mod_php5模块来支持的,这点与nginx不同.nginx是通过第三方的fastcgi处理器才可以对p ...

  5. Android开发中XML布局的常用属性说明

    <!-- 常用属性说明: android:id="@+id/button" 为控件指定Id android:text="NNNNNNNNNN" 指定控件的 ...

  6. 制作OS X 10.9 Mavericks 安装U盘

    转载:http://www.macx.cn/forum.php?mod=viewthread&tid=2094799 安装win7的话,在mac中使用bootcamp制作一个win7安装盘即可 ...

  7. redis参数优化

    redis内存管理方式,支持tcmalloc,jemalloc,malloc三种内存分配,memcache使用slabs,malloc等内存分配方式. 简单点,就是redis,是边用边申请,使用现场申 ...

  8. IE6下png格式图片显示问题

    一开始是使用 _filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/bgBtn.png'); /* IE6 * ...

  9. Zookeeper C API 指南三(回调函数)(转)

    2013-02-21 12:54 by Haippy, 9237 阅读, 0 评论, 收藏, 编辑 接上一篇<Zookeeper C API 指南二(监视(Wathes), 基本常量和结构体介绍 ...

  10. 关于AngularJs中的路由学习总结

    AngularJs中的路由,应用比较广泛,主要是允许我们通过不同的url访问不同的内容,可实现多视图的单页web应用.下面看看具体怎么使用. 关于路由  通常我们的URL形式为http://jtjds ...