結果
| 問題 |
No.2100 [Cherry Alpha C] Two-way Steps
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 20:28:55 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 277 ms / 2,000 ms |
| コード長 | 2,091 bytes |
| コンパイル時間 | 182 ms |
| コンパイル使用メモリ | 82,096 KB |
| 実行使用メモリ | 131,276 KB |
| 最終ジャッジ日時 | 2025-03-20 20:29:52 |
| 合計ジャッジ時間 | 11,932 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 48 |
ソースコード
import sys
input = sys.stdin.read
def main():
data = input().split()
idx = 0
N = int(data[idx]); idx +=1
M = int(data[idx]); idx +=1
H = [0]*(N+1)
for i in range(N):
H[i+1] = int(data[idx])
idx +=1
cherry_edges = [[] for _ in range(N+1)]
zelkova_edges = [[] for _ in range(N+1)]
for _ in range(M):
X = int(data[idx]); idx +=1
Y = int(data[idx]); idx +=1
cherry_edges[X].append(Y)
zelkova_edges[Y].append(X)
INF = float('-inf')
# Cherry's DP
cherry_dp0 = [INF] * (N + 1)
cherry_dp1 = [INF] * (N + 1)
cherry_dp0[1] = 0
for u in range(1, N+1):
current_max = max(cherry_dp0[u], cherry_dp1[u])
for v in cherry_edges[u]:
if H[u] < H[v]:
if cherry_dp0[u] != INF:
new_val = cherry_dp0[u] + (H[v] - H[u])
if new_val > cherry_dp1[v]:
cherry_dp1[v] = new_val
else:
if current_max != INF:
if current_max > cherry_dp0[v]:
cherry_dp0[v] = current_max
ans_cherry = max(cherry_dp0[N], cherry_dp1[N])
if ans_cherry == INF:
ans_cherry = -1
# Zelkova's DP
zelkova_dp0 = [INF] * (N + 1)
zelkova_dp1 = [INF] * (N + 1)
zelkova_dp0[N] = 0
for u in range(N, 0, -1):
current_max = max(zelkova_dp0[u], zelkova_dp1[u])
for x in zelkova_edges[u]:
if H[u] < H[x]:
if zelkova_dp0[u] != INF:
new_val = zelkova_dp0[u] + (H[x] - H[u])
if new_val > zelkova_dp1[x]:
zelkova_dp1[x] = new_val
else:
if current_max != INF:
if current_max > zelkova_dp0[x]:
zelkova_dp0[x] = current_max
ans_zelkova = max(zelkova_dp0[1], zelkova_dp1[1])
if ans_zelkova == INF:
ans_zelkova = -1
print(ans_cherry)
print(ans_zelkova)
if __name__ == '__main__':
main()
lam6er