結果
| 問題 |
No.2100 [Cherry Alpha C] Two-way Steps
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-10-14 22:14:57 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 432 ms / 2,000 ms |
| コード長 | 994 bytes |
| コンパイル時間 | 292 ms |
| コンパイル使用メモリ | 82,636 KB |
| 実行使用メモリ | 116,436 KB |
| 最終ジャッジ日時 | 2024-06-26 15:01:53 |
| 合計ジャッジ時間 | 14,110 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 48 |
ソースコード
import sys
input = sys.stdin.readline
from collections import *
N, M = map(int, input().split())
H = list(map(int, input().split()))
G1 = [[] for _ in range(2*N)]
G2 = [[] for _ in range(2*N)]
for _ in range(M):
u, v = map(int, input().split())
u -= 1
v -= 1
if H[u]>H[v]:
G1[2*u].append(2*v+1)
G1[2*u+1].append(2*v+1)
else:
G1[2*u+1].append(2*v)
if H[u]>H[v]:
G2[2*v+1].append(2*u)
else:
G2[2*v].append(2*u+1)
G2[2*v+1].append(2*u+1)
dp1 = [-10**18]*(2*N)
dp1[0] = 0
dp1[1] = 0
for v in range(2*N):
for nv in G1[v]:
dp1[nv] = max(dp1[nv], dp1[v]+max(0, H[nv//2]-H[v//2]))
dp2 = [-10**18]*(2*N)
dp2[2*N-2] = 0
dp2[2*N-1] = 0
for v in range(2*N-1, -1, -1):
for nv in G2[v]:
dp2[nv] = max(dp2[nv], dp2[v]+max(0, H[nv//2]-H[v//2]))
ans1 = max(dp1[-1], dp1[-2])
ans2 = max(dp2[0], dp2[1])
if ans1<0:
print(-1)
else:
print(ans1)
if ans2<0:
print(-1)
else:
print(ans2)