Peddler
問題
E – Peddler
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…
記録
- 2021/1/20 時間切れで挑戦できず。
解法
- このグラフは
DAG(閉路を含まない有向グラフ)
。 - \(dp[i]\) : 街 \(i\) に到達できる街 (街 \(i\) 自身を含まない) における金の最安値。
- \(A[i] – dp[i]\) の最大値が答え。
コード例
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; using ll = long long; using P = pair<int, int>; #define rep(i, n) for(int i = 0; i < (n); ++i) // using mint = modint998244353; // using mint = modint1000000007; // const int mod = 1000000007; const ll INF = 1LL << 62; // const int INF = 1001001001; int main() { ll N, M; cin >> N >> M; vector<ll> A(N); rep(i, N) { cin >> A[i]; } vector<vector<ll>> graph(N); rep(i, M) { int x, y; cin >> x >> y; x--; y--; graph[x].push_back(y); } vector<ll> cost(N, INF); ll ans = 0LL - INF; rep(i, N) { ans = max(ans, A[i] - cost[i]); cost[i] = min(cost[i], A[i]); int n = graph[i].size(); rep(j, n) { ll v = graph[i][j]; cost[v] = min(cost[i], cost[v]); } } cout << ans << endl; return 0; }