Submission #1026612

#TimeUsernameProblemLanguageResultExecution timeMemory
1026612mansurJobs (BOI24_jobs)C++17
0 / 100
124 ms41808 KiB
#include<bits/stdc++.h> using namespace std; #define rall(s) s.rbegin(), s.rend() #define all(s) s.begin(), s.end() #define sz(s) (int)s.size() #define s second #define f first using ll = long long; using pii = pair<int, int>; using pll = pair<ll, ll>; const int N = 1e6; const ll inf = 1e18; vector<int> g[N]; ll pos[N], val[N], x[N], p[N]; void dfs(int u) { if (x[u] < 0) pos[u] = abs(x[u]), val[u] = 0; else pos[u] = 0, val[u] = x[u]; for (int to: g[u]) { dfs(to); if (pos[to] <= val[u]) { val[u] = val[u] - pos[to] + val[to]; }else { pos[u] = pos[to] - val[u] + pos[u]; val[u] = val[to]; } } if (!val[u]) pos[u] = 0; } void solve() { int n, ok = 0; ll s; cin >> n >> s; for (int i = 1; i <= n; i++) { cin >> x[i] >> p[i]; if (p[i] && p[i] != i - 1) ok = 0; } if (ok) { vector<int> h; ll ans = 0, z = s; for (int i = 1; i <= n + 1; i++) { if (p[i]) h.push_back(i); else { if (sz(h)) { ll pr[sz(h)], mn = 0, mx = 0, val = 0; for (int j = 0; j < sz(h); j++) { if (j) pr[j] = pr[j - 1]; else pr[j] = 0; pr[j] += x[h[j]]; mn = min(mn, pr[j]); mx = max(mx, pr[j]); val = max(pr[j] - mn, val); } s += mx; ans += val; } h = {i}; } } cout << max(ans, s) - z; return; } for (int i = 1; i <= n; i++) { g[p[i]].push_back(i); } dfs(0); if (s <= pos[0]) cout << val[0] - s; else cout << val[0] - pos[0]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...