兔子 Benson 想要驾驶飞机!
Benson 可以在 $n$ 个区域中飞行,区域编号为 $1$ 到 $n$。对于每个区域 $i$,由于地形限制,Benson 在该区域内飞行时必须保持至少 $a[i]$ 的高度。
此外,由于盛行风条件以及 Benson 缺乏飞行经验(毕竟他是一只兔子),他只能在特定的区域对之间飞行。共有 $m$ 对这样的区域,编号为 $1$ 到 $m$。第 $j$ 对区域 $u[j]$ 和 $v[j]$ 表示 Benson 可以在区域 $u[j]$ 和 $v[j]$ 之间双向飞行。保证仅使用这些允许的路径,总是可以从任意区域到达所有其他区域。
最初,Benson 位于区域 $1$,高度为 $0$。他想要前往区域 $n$,并且为了着陆,他必须在高度 $0$ 时结束行程。
在每一分钟内,Benson 可以选择留在当前区域或前往另一个区域。在同一分钟内,他的高度可以增加 $1$、减少 $1$ 或保持不变。然而,当 Benson 到达一个区域时,他的高度必须至少达到该区域要求的最低高度。Benson 到达区域 $n$ 并着陆所需的最短时间是多少?
输入格式
程序必须从标准输入读取数据。
第一行包含两个空格分隔的整数 $n$ 和 $m$,分别表示区域的数量和 Benson 可以飞行的区域对的数量。
下一行包含 $n$ 个空格分隔的整数 $a[1], a[2], \dots, a[n]$,表示每个区域要求的最低高度。
接下来的 $m$ 行,每行包含两个空格分隔的整数。第 $j$ 行包含 $u[j]$ 和 $v[j]$,表示 Benson 可以在区域 $u[j]$ 和 $v[j]$ 之间双向飞行。
输出格式
程序必须打印到标准输出。
输出应包含一个整数,表示在区域 $n$ 着陆所需的最短时间。
子任务
对于所有测试用例,输入满足以下范围:
- $1 \le n \le 200\,000$
- $1 \le m \le 400\,000$
- $0 \le a[i] \le 10^8$
- $a[1] = a[n] = 0$
- $1 \le u[j], v[j] \le n, u[j] \neq v[j]$
你的程序将在满足以下限制的输入实例上进行测试:
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 1 | 22 | $m = n - 1, u[j] = j, v[j] = j + 1$ |
| 2 | 10 | $n \le 2000, m \le 4000, a[i] \le 2000$ |
| 3 | 31 | $n \le 2000, m \le 4000$ |
| 4 | 37 | 无附加限制 |
样例
样例输入 1
3 2 0 2 0 1 2 2 3
样例输出 1
4
说明 1
Benson 正从区域 $1$ 前往区域 $3$。他可以在 $4$ 分钟内完成。
- 第 $1$ 分钟,Benson 留在区域 $1$。他将高度从 $0$ 增加到 $1$。
- 第 $2$ 分钟,Benson 从区域 $1$ 飞往区域 $2$。他将高度从 $1$ 增加到 $2$。
- 第 $3$ 分钟,Benson 从区域 $2$ 飞往区域 $3$。他将高度从 $2$ 减少到 $1$。
- 第 $4$ 分钟,Benson 留在区域 $3$。他将高度从 $1$ 减少到 $0$。
样例输入 2
11 12 0 0 0 0 0 0 2 2 1 5 0 1 2 2 3 3 4 4 5 5 6 6 11 1 7 7 8 8 9 9 11 1 10 10 11
样例输出 2
5
说明 2
Benson 正从区域 $1$ 前往区域 $11$。他可以在 $5$ 分钟内完成。
- 第 $1$ 分钟,Benson 留在区域 $1$。他将高度从 $0$ 增加到 $1$。
- 第 $2$ 分钟,Benson 从区域 $1$ 飞往区域 $7$。他将高度从 $1$ 增加到 $2$。
- 第 $3$ 分钟,Benson 从区域 $7$ 飞往区域 $8$。他保持高度为 $2$。
- 第 $4$ 分钟,Benson 从区域 $8$ 飞往区域 $9$。他将高度从 $2$ 减少到 $1$。
- 第 $5$ 分钟,Benson 从区域 $9$ 飞往区域 $11$。他将高度从 $1$ 减少到 $0$。