Submission #1211323

#TimeUsernameProblemLanguageResultExecution timeMemory
1211323sula2Tree (IOI24_tree)C++20
0 / 100
2095 ms13708 KiB
#include <bits/stdc++.h> #define all(a) a.begin(), a.end() #define popcount(x) __builtin_popcountll(x) using namespace std; using namespace chrono; vector<int> adj[200000]; int W[200000], n; void init(vector<int> P, vector<int> a) { n = P.size(); for (int i = 1; i < n; i++) { adj[P[i]].push_back(i); } for (int i = 0; i < n; i++) { W[i] = a[i]; } } pair<long long, long long> solve(int L, int R, int u = 0) { if (u == 0) { return {L*W[u], L}; } long long ans = 0, sum = 0; for (int v : adj[u]) { auto [_ans, _sum] = solve(L, R, v); ans += _ans; sum += _sum; } // Make it L int C1 = L - sum; // Make it R int C2 = R - sum; if (abs(C1) < abs(C2)) return {ans + C1, L}; else return {ans + C2, R}; } long long query(int L, int R) { long long ans = 0; for (int i = 0; i < n; i++) { long long sum_of_children = 1LL * adj[i].size() * L; long long C = L - sum_of_children; ans += C * W[i]; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...