結果
問題 | No.2100 [Cherry Alpha C] Two-way Steps |
ユーザー | roaris |
提出日時 | 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)