【洛谷 3946】ことりのおやつ(小鸟的点心)
题目描述
这是2017年的冬天。(又到了白色相簿的季节2333)
滑完雪之后,ことり突然想吃点心啦!于是她去了甜品店。
日本的冬天经常下雪。不幸的是,今天也是这样,每秒钟雪的厚度会增加q毫米。
秋叶原共有n个地点,编号从1到n。每个地点在开始的时候的积雪高度为hi。
有m条双向道路连接这些地点,它们的长度分别为wi米。
雪太大,公共交通系统已经停摆了,所以ことり得走路回家。她走路的速度是1m/s。
为了方便地图的绘制,秋叶原的道路规划使得每条道路严格地连接两个不同的地点,并且不会有两条道路连接的地点相同。
每个地点都有一个极限雪高li,单位是毫米,如果到达这个地点的时候,这里的雪的高度高于li则会被困在这个点走不出去,无法成功地走到ことり家。
点心店这个地点的编号是s,ことり家的编号是t。
不考虑点心店和ことり家的雪。
ことり想在g秒内回到家吃点心,越快越好。如果在g秒之内,ことり无法到家,或者她被困在路上了,那么ことり会把wtnap变成她的点心( ・ 8 ・ )
输入格式
第1行6个整数,空格隔开,分别代表n,m,s,t,g,q。
以下n行,每行2个整数,空格隔开,分别表示这个地点的hi和li。
以下m行,每行3个整数,空格隔开,分别表示这条路连接的两个地点u, v和这条路的长度wi。
输出格式
输出1行1个整数,表示到达ことり家的最短用时。
如果wtnap变成了ことり的点心那么输出"wtnap wa kotori no oyatsu desu!"
输出时不含引号。
输入输出样例
2 1 1 2 10 1 1 10 3 10 1 2 6
6
5 6 2 5 10 1 1 10 1 10 1 10 1 10 1 10 1 5 9 1 3 9 2 4 1 2 5 9 3 4 1 3 5 6
8
5 6 2 5 10 1 1 10 1 10 10 10 1 10 1 10 1 5 9 1 3 9 2 4 1 2 5 11 3 4 1 3 5 6
wtnap wa kotori no oyatsu desu!
说明/提示
对于0%的数据,与样例一模一样;
对于40%的数据,q = 0。
对于上一行中50%的数据,所有wi < li。
对于100%的数据,1 ≤ s, t ≤ n; 0 ≤ g, q ≤ 10^9; 0 ≤ wi ≤ li ≤ 10^9。
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<cstdlib> #include<algorithm> #include<queue> using namespace std; const string AFO="wtnap wa kotori no oyatsu desu!"; const int N=500005; int n,m,s,t,g,qq; int cnt,h[N],l[N],x,y,z; int head[N],dis[N]; bool vis[N]; queue<int>q; struct node{ int to,next,val; }e[N<<2]; void add(int u,int v,int va){ e[++cnt].to=v; e[cnt].val=va; e[cnt].next=head[u]; head[u]=cnt; } void SPFA(int s){ memset(dis,0x3f,sizeof(dis)); memset(vis,0,sizeof(vis)); vis[s]=1; dis[s]=0; q.push(s); int x,v; while(!q.empty()){ x=q.front(); q.pop(); vis[x]=0; for(int i=head[x];i;i=e[i].next){ v=e[i].to; if(dis[v]>dis[x]+e[i].val){ dis[v]=dis[x]+e[i].val; if(!vis[v] && l[v]>=h[v]+dis[v]*qq) { vis[v]=1; q.push(v); } } } } } int main(){ scanf("%d %d %d %d %d %d",&n,&m,&s,&t,&g,&qq); for(int i=1;i<=n;i++) scanf("%d %d",&h[i],&l[i]); for(int i=1;i<=m;i++){ scanf("%d %d %d",&x,&y,&z); add(x,y,z); add(y,x,z); } SPFA(s); if(dis[t]<g) printf("%d\n",dis[t]); else cout<<AFO<<endl; return 0; }
原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11734669.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- rxjs里withLatestFrom operators的用法
- rxjs里distinctUntilChanged operators的用法
- pycharm安装及如何导入numpy
- rxjs里debounceTime operators的用法
- rxjs里delay operators的用法
- Android使用FontMetrics对象计算位置坐标
- rxjs里scan和mergeScan operators的用法
- Android自定义控件的步骤
- Android通过Socket与服务器之间进行通信的示例
- SAP Spartacus central configuration - B2cStorefrontModule
- Android自定义控件实现折线图
- 关于Angular Component changeDetection策略设置成OnPush的一个单元测试局限性
- SAP Spartacus CmsService.Components数据结构
- Android同时安装Release和Debug版本的方法
- Django 后台带有字典的列表数据与页面js交互实例