#PD019D. 登山(clim)

登山(clim)

登山(clim)

  • 输入:clim.in
  • 输出:clim.out
  • 时间限制:2 s
  • 内存限制:256 MB

题目描述

训练营组织了一次登山拉练。共有 nn 座山,编号为 11 到 nn,第 ii 座山的高度为 hih_i。其中一些山之间修有双向道路。

一名同学从山 xx 沿道路走到山 yy 时,需要消耗 hy−hxh_y-h_x 点体力。若 hy<hxh_y<h_x,则这个值为负数,表示体力会恢复。行走过程中体力不能变为负数。

现在有 qq 次询问。每次询问给定起点 aa、终点 bb 和初始体力 ee,请判断是否存在一条从山 aa 出发并最终到达山 bb 的路线。每次询问互相独立。

输入格式

从文件 clim.in 中读入数据。

第一行包含两个整数 n,mn,m,分别表示山的数量和道路的数量。

第二行包含 nn 个整数 h1,h2,…,hnh_1,h_2,\dots,h_n,表示每座山的高度。

接下来 mm 行,每行包含两个整数 u,vu,v,表示山 uu 和山 vv 之间有一条双向道路。

接下来一行包含一个整数 qq,表示询问次数。

接下来 qq 行,每行包含三个整数 a,b,ea,b,e,表示起点、终点和初始体力。

输出格式

输出到文件 clim.out 中。

对于每次询问,如果能够从山 aa 到达山 bb,输出 YES,否则输出 NO。

样例1输入

7 7
1 5 3 4 2 4 1
1 4
4 3
3 6
3 2
2 5
5 6
5 7
5
1 1 3
6 2 0
4 7 0
1 7 4
1 7 2

样例1输出

YES
NO
YES
YES
NO

样例1解释

对于第 33 次询问,从山 44 出发时体力为 00。可以先从山 44 到山 33,消耗 h3−h4=3−4=−1h_3-h_4=3-4=-1 点体力,体力恢复为 11;再从山 33 到山 66,消耗 11 点体力;最后从山 66 到山 55、山 77,过程中体力不会变为负数,因此可以到达。

对于第 55 次询问,从山 11 出发时初始体力为 22,无法经过高度超过 33 的山,因此不能到达山 77。

数据范围

对于所有数据,2<=n<=2000002 <= n <= 200000,1<=m,q<=2000001 <= m,q <= 200000,1<=hi<=1091 <= h_i <= 10^9,0<=e<=1090 <= e <= 10^9。保证没有自环和重边。每个测试点 55 分。

特殊性质 A:保证所有山的高度相同。

特殊性质 B:保证道路形成一棵树。