Submission #107039

#TimeUsernameProblemLanguageResultExecution timeMemory
107039maksim_gaponovFireworks (APIO16_fireworks)C++14
26 / 100
47 ms1792 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define int ll #define len(x) (int)(x).size() #define all(x) (x).begin(), (x).end() #define pb push_back const int MOD = 1e9 + 7; int mod(int x) { x %= MOD; if (x < 0) x += MOD; return x; } const int MAXN = 310; const int MAXA = 310; const int INF = 1e18; vector<vector<int>> g; vector<vector<int>> dp; vector<int> p; vector<int> c; void dfs(int u) { dp[u].resize(MAXA, INF); vector<int> sums(MAXA); for (auto v : g[u]) { dfs(v); for (int i = 0; i < MAXA; ++i) { sums[i] += dp[v][i]; } } if (!len(g[u])) { for (int i = 0; i < MAXA; ++i) { dp[u][i] = abs(i - c[u]); } return; } for (int x = 0; x < MAXA; ++x) { for (int y = 0; y <= x; ++y) { if (u == 0 && x != y) continue; int new_c = x - y; dp[u][x] = min(dp[u][x], abs(c[u] - new_c) + sums[y]); } } } void run() { int n, m; cin >> n >> m; g.resize(n + m); dp.resize(n + m); vector<int> v; p.resize(n + m); c.resize(n + m); p[0] = -1; for (int i = 1; i < n + m; ++i) { cin >> p[i] >> c[i]; --p[i]; g[p[i]].pb(i); v.pb(c[i]); } if (n == 1) { sort(all(v)); int X = v[len(v) / 2]; int ans = 0; for (int i = 0; i < len(v); ++i) { ans += abs(v[i] - X); } cout << ans << '\n'; return; } else { dfs(0); int ans = INF; for (auto val : dp[0]) ans = min(ans, val); cout << ans << '\n'; return; } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); run(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...