Submission #970911

#TimeUsernameProblemLanguageResultExecution timeMemory
970911vjudge1Fireworks (APIO16_fireworks)C++14
7 / 100
87 ms197164 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int N=5000+10, inf=1e18; int n, m, f[N][N], d[N]; vector<int> vals; vector<pair<int, int>> g[N]; void pre_dfs(int u){ for (auto &e:g[u]){ d[e.first]=d[u]+e.second; pre_dfs(e.first); } } void dfs(int u){ if (g[u].empty()){ f[u][lower_bound(vals.begin(), vals.end(), d[u])-vals.begin()]=0; return; } for (int i=0; i<N; ++i) f[u][i]=0; for (auto &e:g[u]){ int v=e.first, w=e.second; dfs(v); deque<int> dq; for (int i=1, j=1; i<(int)vals.size(); ++i){ while (dq.size() && dq.front()<i) dq.pop_front(); while (j<(int)vals.size() && vals[j]-vals[i]<=w){ while (dq.size() && f[v][dq.back()]+vals[dq.back()]>=f[v][j]+vals[j]) dq.pop_back(); dq.push_back(j); ++j; } f[v][i]=min(f[v][i], f[v][dq.front()]+vals[dq.front()]-vals[i]); } for (int i=2; i<(int)vals.size(); ++i) f[v][i]=min(f[v][i], f[v][i-1]+vals[i]-vals[i-1]); for (int i=1; i<(int)vals.size(); ++i) f[u][i]=min(inf, f[u][i]+f[v][i]); } } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; if (n==1){ vector<int> v; for (int i=2; i<=n+m; ++i){ int p, c; cin >> p >> c; v.push_back(c); } sort(v.begin(), v.end()); int val=v[m/2], ans=0; for (auto &i:v) ans+=abs(i-val); cout << ans << '\n'; return 0; } for (int i=2; i<=m+n; ++i){ int p, c; cin >> p >> c; g[p].emplace_back(i, c); } for (int i=0; i<N; ++i) for (int j=0; j<N; ++j) f[i][j]=inf; pre_dfs(1); vals.push_back(-1); for (int i=n+1; i<=n+m; ++i) vals.push_back(d[i]); sort(vals.begin(), vals.end()); vals.resize(unique(vals.begin(), vals.end())-vals.begin()); dfs(1); cout << *min_element(f[1]+1, f[1]+(int)vals.size()) << '\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...