Submission #1121328

#TimeUsernameProblemLanguageResultExecution timeMemory
1121328yeediotFireworks (APIO16_fireworks)C++17
100 / 100
132 ms55624 KiB
#pragma GCC optimize("O3") #include<bits/stdc++.h> using namespace std; #define pb push_back #define sz(x) (int)(x.size()) const int mxn = 3e5 + 5; inline char gc() { const static int SZ = 1 << 16; static char buf[SZ], *p1, *p2; if (p1 == p2 && (p2 = buf + fread(p1 = buf, 1, SZ, stdin), p1 == p2)) return -1; return *p1++; } inline void rd() {} template <typename T, typename... U> inline void rd(T &x, U &...y) { x = 0; bool f = 0; char c = gc(); while (isdigit(c)) x = (x << 1) + (x << 3) + (c ^ 48), c = gc(); f && (x = -x), rd(y...); } template <typename T> inline void prt(T x) { if (x > 9)prt(x / 10); putchar((x % 10) ^ 48); } vector<int>adj[mxn]; int n, m, l[mxn]; inline priority_queue<long long> dfs(int v){ priority_queue<long long>pq; if(v > n){ pq.push(l[v]), pq.push(l[v]); return pq; } for(auto u : adj[v]){ auto pq2 = dfs(u); if(sz(pq) < sz(pq2)) swap(pq, pq2); while(sz(pq2)){ pq.push(pq2.top()); pq2.pop(); } } for(int i = 1; i < sz(adj[v]); i++){ pq.pop(); } long long R = pq.top(); pq.pop(); long long L = pq.top(); pq.pop(); pq.push(l[v] + L), pq.push(l[v] + R); return pq; } inline void solve(){ rd(n), rd(m); long long sum = 0; int a; for(int i = 2; i <= n + m; i++){ rd(a), rd(l[i]); sum += l[i]; adj[a].pb(i); } auto pq = dfs(1); pq.push(0); sum += pq.top(); while(sz(pq) > 1){ sum -= pq.top(); pq.pop(); } prt(sum); } signed main(){ solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...