Submission #875558

#TimeUsernameProblemLanguageResultExecution timeMemory
875558NeroZeinFireworks (APIO16_fireworks)C++17
7 / 100
1 ms600 KiB
#include "bits/stdc++.h" using namespace std; #ifdef Nero #include "Deb.h" #else #define deb(...) #endif const int N = 5002; long long dis[N]; long long mn[N], mx[N]; vector<pair<int, int>> g[N]; void dfs(int v) { if (g[v].size() == 0) { mn[v] = mx[v] = dis[v]; return; } mn[v] = LLONG_MAX; mx[v] = -LLONG_MAX; for (auto [u, w] : g[v]) { dis[u] = dis[v] + w; dfs(u); mn[v] = min(mn[v], mn[u]); mx[v] = max(mx[v], mx[u]); } } long long dfs2(int v, long long add, const long long req) { if (g[v].size() == 0 && dis[v] + add != req) { return (long long) 1e15; } long long ret = 0; for (auto [u, w] : g[v]) { long long t = 0, r = 1; if (mn[u] + add > req) { assert(add <= 0); r = -1; t = min((long long) w, mn[u] + add - req); } else if (mx[u] + add < req) { assert(add >= 0); t = req - (mx[u] + add); } ret += t + dfs2(u, add + t * r, req); } return ret; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; for(int i = 2; i <= n + m; ++i) { int p, c; cin >> p >> c; g[p].emplace_back(i, c); } dfs(1); long long ans = LLONG_MAX; for (int i = n + 1; i <= n + m; ++i) { ans = min(ans, dfs2(1, 0, dis[i])); } cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...