結果
| 問題 |
No.2100 [Cherry Alpha C] Two-way Steps
|
| コンテスト | |
| ユーザー |
ntuda
|
| 提出日時 | 2022-10-19 22:43:25 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 417 ms / 2,000 ms |
| コード長 | 1,122 bytes |
| コンパイル時間 | 147 ms |
| コンパイル使用メモリ | 81,940 KB |
| 実行使用メモリ | 129,192 KB |
| 最終ジャッジ日時 | 2024-06-29 22:52:07 |
| 合計ジャッジ時間 | 13,280 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 48 |
ソースコード
N, M = map(int, input().split())
H = list(map(int, input().split()))
XY = [list(map(int, input().split())) for _ in range(M)]
# dp[i][j]:= 足場iにいてその前の移動が昇り:1,下り:0のときの登った回数の最大値
E = [[] for _ in range(N)]
for x, y in XY:
E[x - 1].append(y - 1)
dp = [[-10 ** 12, -10 ** 12] for _ in range(N)]
dp[0][0] = 0
dp[0][1] = 0
for x in range(N):
hx = H[x]
for y in E[x]:
hy = H[y]
if hy > hx:
dp[y][1] = max(dp[y][1], dp[x][0] + hy - hx)
else:
dp[y][0] = max(dp[y][0], dp[x][1], dp[x][0])
ans = []
ans.append(max(dp[N - 1]))
E = [[] for _ in range(N)]
for x, y in XY:
E[y - 1].append(x - 1)
dp = [[-10 ** 12, -10 ** 12] for _ in range(N)]
dp[N - 1][0] = 0
dp[N - 1][1] = 0
for y in reversed(range(N)):
hy = H[y]
for x in E[y]:
hx = H[x]
if hx > hy:
dp[x][1] = max(dp[x][1], dp[y][0] + hx - hy)
else:
dp[x][0] = max(dp[x][0], dp[y][1], dp[y][0])
ans.append(max(dp[0]))
for i in range(2):
if ans[i] < 0:
print(-1)
else:
print(ans[i])
ntuda