제출 #1293483

#제출 시각아이디문제언어결과실행 시간메모리
1293483kian2009Fireworks (APIO16_fireworks)C++20
19 / 100
11 ms1188 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 3e2 + 10, INF = 1e9; ll n, m, dp[MAXN][MAXN], sum[MAXN]; vector<pair<ll, ll>> adj[MAXN]; void input() { cin >> n >> m; for (int i = 1; i < n + m; i++) { ll u, w; cin >> u >> w; adj[--u].push_back({i, w}); } for (int i = 0; i < n + m; i++) for (int j = 0; j < MAXN; j++) dp[i][j] = INF; } void dfs(int u) { if ((int)adj[u].size() == 0) { dp[u][0] = 0; return; } for (auto v : adj[u]) dfs(v.first); for (int i = 0; i < MAXN; i++) sum[i] = 0; for (auto v : adj[u]) for (int i = 0; i < MAXN; i++) { ll mi = INF; for (int j = 0; j <= i; j++) mi = min(mi, dp[v.first][j] + abs(v.second - (i - j))); sum[i] += mi; } for (int i = 0; i < MAXN; i++) dp[u][i] = min(dp[u][i], sum[i]); } ll findAns() { ll res = INF; for (int i = 0; i < MAXN; i++) res = min(res, dp[0][i]); return res; } int main() { ios::sync_with_stdio(false); cin.tie(0); input(); dfs(0); cout << findAns() << endl; 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...