Problem:


MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});

D: 次元旅行

問題

 次元が $1$ 次元から $N$ 次元まで存在する。 
AORイカちゃんは次元間を移動できる。
具体的には、AORイカちゃんが $i$ 次元にいるとき、 $j$ 次元( $i > j$ )には自由に移動する事ができるが、 $k$ 次元( $i  j$ )の「次元の呪い」は受けない。
 

 

AORイカちゃんが $s$ 次元から $t$ 次元に移動するとき、 負うダメージの合計の最小値を求めよ。
ただし、AORイカちゃんは既に $s$ 次元の「次元の呪い」は受けており、そのダメージは考えないものとする。
また、AORイカちゃんは $t$ 次元に行けることが保証されている。

制約

$2 \leq N \leq 10^5$

$1 \leq M \leq min(10^5, N \times (N - 1) / 2)$

$1 \leq s, t \leq N$

$s \neq t$

$1 \leq d_i \leq 10^3$

$1 \leq a_i < b_i \leq N$

$i \neq j$ のとき $( a_i \neq a_j$ または $b_i \neq b_j )$ をみたす

入力は全て整数で与えられる。

入力形式

入力は以下の形式で与えられる。

$N \ M \ s \ t$

$d_1 \dots d_N$

$a_1 \ b_1$

$a_2 \ b_2$

$\vdots$

$a_M \ b_M$

出力

AORイカちゃんが受けるダメージの合計の最小値を出力せよ。また、末尾に改行も出力せよ。

サンプル

サンプル入力 1

3 1 2 3
1 2 3
1 3

サンプル出力 1

3

サンプル入力 2

3 2 1 2
1 3 2
1 2
1 3

サンプル出力 2

2

サンプル入力 3

7 5 2 3
277 390 2 784 401 641 917
2 5
5 6
1 5
2 4
5 7

サンプル出力 3

401



Sample input:
3 1 2 3
1 2 3
1 3


Sample output:
3

Submission status: Accepted

Solution code:
# AOJ 2834 Dimension travel
# Python3 2018.7.12 bal4u

INF = 0x7fffffff
import heapq
def dijkstra(V, to, start, goal):
	dist = [INF]*V
	Q = []
	dist[start] = 0
	heapq.heappush(Q, (0, start))
	while Q:
		t, s = heapq.heappop(Q)
		if s == goal: break
		if dist[s] < t: continue
		for e in to[s]:
			nt = t
			if e > s: nt += d[e]
			if dist[e] > nt:
				dist[e] = nt
				heapq.heappush(Q, (nt, e))
	return t

import sys
N, M, s, t = map(int, input().split())
s, t = s-1, t-1
if s >= t: print(0); sys.exit(0)
d = list(map(int, input().split()))
to = [[i-1] if i > 0 else [] for i in range(N)]
for i in range(M):
	a, b = map(int, input().split())
	to[a-1].append(b-1)
print(dijkstra(N, to, s, t))