結果
問題 | No.2100 [Cherry Alpha C] Two-way Steps |
ユーザー |
|
提出日時 | 2024-04-12 10:38:32 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 447 ms / 2,000 ms |
コード長 | 1,245 bytes |
コンパイル時間 | 4,491 ms |
コンパイル使用メモリ | 252,836 KB |
最終ジャッジ日時 | 2025-02-20 23:58:49 |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 48 |
ソースコード
#include <bits/stdc++.h> #include <atcoder/all> using namespace std; using namespace atcoder; using ll = long long; using ld = long double; using mint = modint998244353; int N, M, H[101010]; vector<int> G[101010]; int main() { cin >> N >> M; for (int i = 1; i <= N; i++) cin >> H[i]; for (int i = 1; i <= M; i++) { int x, y; cin >> x >> y; G[x].push_back(y); G[y].push_back(x); } ll INF = 1LL << 60; vector<vector<ll>> dpc(N + 1, vector<ll>(2, -INF)); dpc[1][0] = 0; for (int a = 1; a <= N; a++) { for (auto b: G[a]) { if (a < b) { if (H[a] < H[b]) dpc[b][1] = max(dpc[b][1], dpc[a][0] + (H[b] - H[a])); else dpc[b][0] = max(dpc[b][0], max(dpc[a][0], dpc[a][1])); } } } vector<vector<ll>> dpz(N + 1, vector<ll>(2, -INF)); dpz[N][0] = 0; for (int a = N; a >= 1; a--) { for (auto b: G[a]) { if (a > b) { if (H[a] < H[b]) dpz[b][1] = max(dpz[b][1], dpz[a][0] + (H[b] - H[a])); else dpz[b][0] = max(dpz[b][0], max(dpz[a][0], dpz[a][1])); } } } cout << (max(dpc[N][0], dpc[N][1]) > -INF / 2 ? max(dpc[N][0], dpc[N][1]): -1) << endl; cout << (max(dpz[1][0], dpz[1][1]) > -INF / 2 ? max(dpz[1][0], dpz[1][1]): -1) << endl; return 0; }