Submission #593661

#TimeUsernameProblemLanguageResultExecution timeMemory
5936618e7Fireworks (APIO16_fireworks)C++17
100 / 100
334 ms80284 KiB
//Challenge: Accepted #include <bits/stdc++.h> using namespace std; #ifdef zisk void debug(){cout << endl;} template<class T,class ... U> void debug(T a, U ... b){cout << a << " ", debug(b...);} template<class T> void pary(T l, T r) { while (l != r) cout << *l << " ", l++; cout << endl; } #else #define debug(...) 0 #define pary(...) 0 #endif #define ll long long #define maxn 300005 #define pii pair<ll, ll> #define ff first #define ss second #define io ios_base::sync_with_stdio(0);cin.tie(0); #define se multiset<ll> vector<pii> adj[maxn]; void merge(se &a, se &b) { if (b.size() > a.size()) swap(a, b); for (auto i:b) a.insert(i); b.clear(); } ll vy[maxn]; //cost at 0 se dfs(int n) { se ret; int chi = 0; for (auto [v, e]:adj[n]) { chi++; se tmp = dfs(v); ll pr = *prev(tmp.end()); tmp.erase(prev(tmp.end())); ll pl = *prev(tmp.end()); tmp.erase(prev(tmp.end())); tmp.insert(pl + e), tmp.insert(pr + e); vy[n] += vy[v] + e; merge(ret, tmp); } for (int i = 0;i < chi - 1;i++) { ret.erase(prev(ret.end())); } if (chi == 0) { ret.insert(0); ret.insert(0); } return ret; } int main() { io int n, m; cin >> n >> m; for (int i = 2;i <= n + m;i++) { int pi, ci; cin >> pi >> ci; adj[pi].push_back({i, ci}); } se s = dfs(1); ll ans = vy[1], slope = -s.size() + 1, curx = 0; for (auto i:s) { ans += slope * (i - curx); curx = i; slope++; } cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...