結果
問題 | No.2100 [Cherry Alpha C] Two-way Steps |
ユーザー | McGregorsh |
提出日時 | 2022-10-24 23:19:21 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 567 ms / 2,000 ms |
コード長 | 2,493 bytes |
コンパイル時間 | 524 ms |
コンパイル使用メモリ | 86,932 KB |
実行使用メモリ | 123,292 KB |
最終ジャッジ日時 | 2023-09-16 00:52:49 |
合計ジャッジ時間 | 27,505 ms |
ジャッジサーバーID (参考情報) |
judge13 / judge14 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 241 ms
92,948 KB |
testcase_01 | AC | 245 ms
92,868 KB |
testcase_02 | AC | 236 ms
92,704 KB |
testcase_03 | AC | 236 ms
92,884 KB |
testcase_04 | AC | 476 ms
111,612 KB |
testcase_05 | AC | 426 ms
107,228 KB |
testcase_06 | AC | 309 ms
98,564 KB |
testcase_07 | AC | 316 ms
99,912 KB |
testcase_08 | AC | 463 ms
115,080 KB |
testcase_09 | AC | 477 ms
107,864 KB |
testcase_10 | AC | 440 ms
101,360 KB |
testcase_11 | AC | 454 ms
109,824 KB |
testcase_12 | AC | 399 ms
104,304 KB |
testcase_13 | AC | 392 ms
112,104 KB |
testcase_14 | AC | 454 ms
102,960 KB |
testcase_15 | AC | 395 ms
110,548 KB |
testcase_16 | AC | 459 ms
103,656 KB |
testcase_17 | AC | 364 ms
109,912 KB |
testcase_18 | AC | 410 ms
111,512 KB |
testcase_19 | AC | 541 ms
116,792 KB |
testcase_20 | AC | 337 ms
100,488 KB |
testcase_21 | AC | 402 ms
104,564 KB |
testcase_22 | AC | 480 ms
104,352 KB |
testcase_23 | AC | 459 ms
113,412 KB |
testcase_24 | AC | 537 ms
118,124 KB |
testcase_25 | AC | 544 ms
119,716 KB |
testcase_26 | AC | 535 ms
118,304 KB |
testcase_27 | AC | 565 ms
120,608 KB |
testcase_28 | AC | 541 ms
121,440 KB |
testcase_29 | AC | 567 ms
120,464 KB |
testcase_30 | AC | 525 ms
119,996 KB |
testcase_31 | AC | 519 ms
121,536 KB |
testcase_32 | AC | 535 ms
120,012 KB |
testcase_33 | AC | 558 ms
119,688 KB |
testcase_34 | AC | 524 ms
106,672 KB |
testcase_35 | AC | 524 ms
105,436 KB |
testcase_36 | AC | 513 ms
105,852 KB |
testcase_37 | AC | 509 ms
106,120 KB |
testcase_38 | AC | 547 ms
107,424 KB |
testcase_39 | AC | 413 ms
104,236 KB |
testcase_40 | AC | 410 ms
103,888 KB |
testcase_41 | AC | 411 ms
103,632 KB |
testcase_42 | AC | 424 ms
104,548 KB |
testcase_43 | AC | 413 ms
104,120 KB |
testcase_44 | AC | 394 ms
123,276 KB |
testcase_45 | AC | 393 ms
123,292 KB |
testcase_46 | AC | 367 ms
119,396 KB |
testcase_47 | AC | 371 ms
119,576 KB |
ソースコード
import sys, re from fractions import Fraction from math import ceil, floor, sqrt, pi, factorial, gcd from copy import deepcopy from collections import Counter, deque, defaultdict from heapq import heapify, heappop, heappush from itertools import accumulate, product, combinations, combinations_with_replacement, permutations from bisect import bisect, bisect_left, bisect_right from functools import reduce from decimal import Decimal, getcontext, ROUND_HALF_UP def i_input(): return int(input()) def i_map(): return map(int, input().split()) def i_list(): return list(i_map()) def i_row(N): return [i_input() for _ in range(N)] def i_row_list(N): return [i_list() for _ in range(N)] def s_input(): return input() def s_map(): return input().split() def s_list(): return list(s_map()) def s_row(N): return [s_input for _ in range(N)] def s_row_str(N): return [s_list() for _ in range(N)] def s_row_list(N): return [list(s_input()) for _ in range(N)] def lcm(a, b): return a * b // gcd(a, b) def get_distance(x1, y1, x2, y2): d = sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) return d def rotate(table): n_fild = [] for x in zip(*table[::-1]): n_fild.append(x) return n_fild sys.setrecursionlimit(10 ** 7) INF = float('inf') MOD = 10 ** 9 + 7 MOD2 = 998244353 ###関数コピーしたか?### def main(): N, M = i_map() H = i_list() nums1 = [[] for i in range(N)] nums2 = [[] for i in range(N)] for i in range(M): a, b = i_map() a -= 1 b -= 1 nums1[a].append(b) nums2[b].append(a) dp1 = [[-INF] * N for i in range(2)] dp1[0][0] = 0 for i in range(N): for j in nums1[i]: X = H[i] Y = H[j] if X < Y: cost = Y - X dp1[1][j] = max(dp1[1][j], dp1[0][i] + cost) else: dp1[0][j] = max(dp1[0][j], dp1[0][i], dp1[1][i]) dp2 = [[-INF] * N for i in range(2)] dp2[0][-1] = 0 for i in range(N-1, -1, -1): for j in nums2[i]: Y = H[i] X = H[j] if X > Y: cost = X - Y dp2[1][j] = max(dp2[1][j], dp2[0][i] + cost) else: dp2[0][j] = max(dp2[0][j], dp2[0][i], dp2[1][i]) if dp1[0][-1] == -INF and dp1[1][-1] == -INF: print(-1) else: print(max(dp1[0][-1], dp1[1][-1])) if dp2[0][0] == -INF and dp2[1][0] == -INF: print(-1) else: print(max(dp2[0][0], dp2[1][0])) if __name__ == '__main__': main()