Submission #251402

#TimeUsernameProblemLanguageResultExecution timeMemory
251402atoizFireworks (APIO16_fireworks)C++14
7 / 100
10 ms14464 KiB
/*input 4 6 1 5 2 5 2 8 3 3 3 2 3 3 2 9 4 4 4 3 */ #include <iostream> #include <vector> #include <algorithm> #include <cstdio> #include <cassert> using namespace std; #define FOR(i, a, b) for (int i = a; i <= b; ++i) #define FORA(i, a) for (auto &i : a) #define FORB(i, a, b) for (int i = a; i >= b; --i) const int MAXN = 300007; int P[MAXN], C[MAXN], N, M, D[MAXN], L[MAXN], R[MAXN]; vector<int> events[MAXN]; vector<int> children[MAXN]; long long ans = 0; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> M; FOR(i, 2, N + M) { cin >> P[i] >> C[i]; children[P[i]].push_back(i); } FOR(i, 1, N) assert(!children[i].empty()); FOR(i, N + 1, N + M) assert(children[i].empty()); FOR(i, N + 1, N + M) L[i] = C[i], R[i] = C[i]; FORB(i, N, 1) { vector<int> vec; for (int j : children[i]) vec.push_back(L[j]), vec.push_back(R[j]); sort(vec.begin(), vec.end()); int l = vec[children[i].size() - 1], r = vec[children[i].size()]; for (int j : children[i]) { if (l < L[j]) ans += L[j] - l; else if (l > R[j]) ans += l - R[j]; } L[i] = l + C[i], R[i] = r + C[i]; // cout << i << ": " << L[i] << ' ' << R[i] << endl; } cout << ans << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...