Submission #1278107

#TimeUsernameProblemLanguageResultExecution timeMemory
1278107julsjlvTree (IOI24_tree)C++20
7 / 100
67 ms24056 KiB
#include "tree.h" #include <stdio.h> #include <map> #define lol long long using namespace std; int n; std::vector<int> p, w; std::vector<vector<int> > children; map<int, int> counts; // return countLeaves int dfs(int node) { int leaves = 0; if (w[node] == 0) { for (auto j: children[node]) counts[dfs(j)]++; return 1; } for (auto j: children[node]) leaves += dfs(j); return (children[node].size() == 0) ? 1 : leaves; } void init(std::vector<int> P, std::vector<int> W) { p = P; w = W; n = (int)p.size(); counts.clear(); children.clear(); children = vector<vector<int> >(p.size(), vector<int>()); for (int i = 0; i < n; i++) if (p[i] != -1) children[p[i]].push_back(i); int leavesOfRoot = dfs(0); counts[leavesOfRoot]++; } long long subtree(int L, int R, int leavesCount) { lol sumLeaves = leavesCount * ((lol) L); if (sumLeaves <= R) { return sumLeaves; } else { return sumLeaves + (sumLeaves - R); } } long long query(int L, int R) { long long result = 0; for (auto j: counts) result += subtree(L, R, j.first) * j.second; return result; }
#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...